{"openapi":"3.1.0","info":{"title":"Plexichat API","description":"REST API for Plexichat messaging platform","version":"a.1.0-49"},"paths":{"/api/v1/":{"get":{"tags":["General"],"summary":"API root","description":"API v1 root endpoint.","operationId":"api_root_api_v1__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__routes__RootResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/health":{"get":{"tags":["Health","Health"],"summary":"Health check","description":"Check API health status.\n\nReturns the current health status and API version.","operationId":"health_check_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/version":{"get":{"tags":["Version","Version"],"summary":"Get server version","description":"Get server version information.\n\nReturns the current server version and minimum supported client version.\nClients should call this on startup to verify compatibility.","operationId":"get_server_version_api_v1_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerVersionResponse"}}}}}}},"/api/v1/version/negotiate":{"post":{"tags":["Version","Version"],"summary":"Negotiate version","description":"Negotiate version compatibility with the server.\n\nClients should call this endpoint to check if their version is compatible.\nThe server will indicate if an update is required or recommended.","operationId":"negotiate_version_api_v1_version_negotiate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionNegotiateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionNegotiateResponse"}}}},"400":{"description":"Invalid version format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionErrorResponse"}}}},"426":{"description":"Client update required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/status":{"get":{"tags":["Version","Version"],"summary":"Get server status","description":"Get current server status.\n\nReturns the server's operational state, version, and any maintenance announcements.\nClients should poll this endpoint periodically to stay informed of server state changes.\n\nRecommended polling interval: 60 seconds during normal operation,\n5 seconds when state is not 'running'.","operationId":"get_server_status_api_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerStatusResponse"}}}}}}},"/api/v1/capabilities":{"get":{"tags":["System","System"],"summary":"Get server capabilities","description":"Get global server capabilities and configuration constants.\n\nThis includes UI constants like avatar color palettes, size limits,\nand supported features.","operationId":"get_capabilities_api_v1_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerCapabilitiesResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["Authentication","Authentication"],"summary":"Register a new user","description":"Register a new user account.\n\nCreates a new user with the provided credentials and returns a session token.\nIf alpha registration mode is enabled, automatically grants alpha tier and badge.","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Invalid registration data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid credentials or session expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"User already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["Authentication","Authentication"],"summary":"User login","description":"Authenticate a user.\n\nReturns a session token on success, or a 2FA challenge if enabled.","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"Invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Account locked or email not verified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/oauth/{provider}/login":{"get":{"tags":["Authentication","Authentication"],"summary":"Initiate OAuth login","description":"Initiate an OAuth login flow with secure server-side state management.\n\nSecurity features:\n- Server-side state storage (CSRF protection)\n- PKCE support for providers that support it\n- Nonce for OpenID Connect providers\n- Rate limiting per IP address\n\nReturns the authorization URL to redirect the user to.","operationId":"oauth_login_init_api_v1_auth_oauth__provider__login_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","title":"Redirect Uri"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthLoginResponse"}}}},"400":{"description":"Invalid provider","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many pending OAuth requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/oauth/{provider}/callback":{"post":{"tags":["Authentication","Authentication"],"summary":"OAuth callback","description":"Handle OAuth callback and complete login with secure state verification.\n\nSecurity features:\n- Server-side state verification (CSRF protection)\n- PKCE verification if enabled\n- Single-use state tokens (replay protection)","operationId":"oauth_callback_api_v1_auth_oauth__provider__callback_post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthCallbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Invalid request or provider","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa":{"post":{"tags":["Authentication","Authentication"],"summary":"Complete 2FA","description":"Complete two-factor authentication.\n\nValidates the 2FA code and returns a session token on success.","operationId":"complete_2fa_api_v1_auth_2fa_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"Invalid or expired 2FA code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["Authentication","Authentication"],"summary":"Logout session","description":"Logout current session.\n\nRevokes the current session token.","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["Authentication","Authentication"],"summary":"Refresh session token","description":"Refresh the current session.\n\nValidates the current session token and returns a potentially updated token.\nIf the session is near expiration, it will be extended.","operationId":"refresh_session_api_v1_auth_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"Invalid or expired session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/auth/2fa/status":{"get":{"tags":["Authentication","Authentication"],"summary":"Get 2FA status","description":"Get current 2FA status for the user.","operationId":"get_2fa_status_api_v1_auth_2fa_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorStatusResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/auth/sessions":{"get":{"tags":["Authentication","Authentication"],"summary":"List active sessions","description":"Get all active sessions for the current user.","operationId":"get_sessions_list_api_v1_auth_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SessionResponse"},"type":"array","title":"Response Get Sessions List Api V1 Auth Sessions Get"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/auth/sessions/{session_id}":{"delete":{"tags":["Authentication","Authentication"],"summary":"Revoke session","description":"Revoke a specific session.","operationId":"revoke_session_api_v1_auth_sessions__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid session ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Session not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/enable":{"post":{"tags":["Authentication","Authentication"],"summary":"Enable 2FA","description":"Enable 2FA - returns QR code and secret.\n\nRequires password confirmation. Returns setup data for authenticator app.","operationId":"enable_2fa_api_v1_auth_2fa_enable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupResponse"}}}},"400":{"description":"Password required or invalid data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid password","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"2FA is already enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/confirm":{"post":{"tags":["Authentication","Authentication"],"summary":"Confirm 2FA setup","description":"Confirm 2FA setup with TOTP code.\n\nValidates the code from authenticator app to complete 2FA setup.","operationId":"confirm_2fa_setup_api_v1_auth_2fa_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorConfirmRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Valid 6-digit code required or 2FA setup not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/disable":{"post":{"tags":["Authentication","Authentication"],"summary":"Disable 2FA","description":"Disable 2FA.\n\nRequires password and current 2FA code for security.","operationId":"disable_2fa_api_v1_auth_2fa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorDisableRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Password or code required or 2FA not enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid password or code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/sessions/revoke-all":{"post":{"tags":["Authentication","Authentication"],"summary":"Revoke all sessions","description":"Revoke all sessions except optionally the current one.","operationId":"revoke_all_sessions_api_v1_auth_sessions_revoke_all_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeAllSessionsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeAllSessionsResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/password-requirements":{"get":{"tags":["Authentication","Authentication"],"summary":"Get password requirements","description":"Get server password requirements.\n\nReturns the password policy configuration so clients can validate\npasswords before submission and display requirements to users.","operationId":"get_password_requirements_api_v1_auth_password_requirements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordRequirementsResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/auth/password-reset/request":{"post":{"tags":["Authentication","Authentication"],"summary":"Request password reset","description":"Request a password reset email.\n\nAlways returns success to prevent email enumeration.","operationId":"request_password_reset_api_v1_auth_password_reset_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/password-reset/confirm":{"post":{"tags":["Authentication","Authentication"],"summary":"Confirm password reset","description":"Confirm password reset with token.","operationId":"confirm_password_reset_api_v1_auth_password_reset_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetConfirm"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid token or weak password","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me":{"get":{"tags":["Users","Users"],"summary":"Get current user","description":"Get current user information.\n\nReturns the authenticated user's profile including private fields.","operationId":"get_current_user_info_api_v1_users__me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Users","Users"],"summary":"Delete account","description":"Schedule the current user's account for deletion.\n\nRequires password verification and 2FA code (if enabled).\nThe account will be frozen for 30 days before permanent erasure.","operationId":"schedule_account_deletion_api_v1_users__me_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDeletionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid password or 2FA code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Users","Users"],"summary":"Update current user","description":"Update current user profile.\n\nUpdates the authenticated user's profile fields.","operationId":"update_current_user_api_v1_users__me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"400":{"description":"Invalid update data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Incorrect current password","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"User already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/avatar":{"post":{"tags":["Users","Users"],"summary":"Upload avatar","description":"Upload user avatar.\n\nAccepts image file upload and stores it in the database.\nUses the avatars module for processing and storage.","operationId":"upload_avatar_api_v1_users__me_avatar_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_avatar_api_v1_users__me_avatar_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAvatarResponse"}}}},"400":{"description":"Invalid file or upload error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/notes":{"get":{"tags":["Users","Users"],"summary":"Get user notes channel","description":"Get or create the personal notes channel for the current user.\n\nPersonal notes are a single-user conversation for storing private notes\nthat sync across devices.","operationId":"get_notes_channel_api_v1_users__me_notes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotesChannelResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"501":{"description":"Notes not implemented","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/users/@me/channels":{"get":{"tags":["Users","Users"],"summary":"List DM channels","description":"Get all DM channels for the current user.","operationId":"get_dm_channels_api_v1_users__me_channels_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DMChannelResponse"},"type":"array","title":"Response Get Dm Channels Api V1 Users  Me Channels Get"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Users","Users"],"summary":"Create DM channel","description":"Create or get a DM channel with a user.","operationId":"create_dm_channel_api_v1_users__me_channels_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DMChannelCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DMChannelResponse"}}}},"400":{"description":"Invalid recipient ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Cannot message this user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"501":{"description":"DM creation not implemented","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/search":{"get":{"tags":["Users","Users"],"summary":"Search user","description":"Search for a user by username.\n\nReturns the user if found by exact username match.","operationId":"search_user_by_username_api_v1_users_search_get","parameters":[{"name":"username","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublicResponse"}}}},"400":{"description":"Username required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}":{"get":{"tags":["Users","Users"],"summary":"Get user by ID","description":"Get user by ID.\n\nReturns public profile information for the specified user.","operationId":"get_user_api_v1_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublicResponse"}}}},"400":{"description":"Invalid user ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/messaging-settings":{"get":{"tags":["Users","Users"],"summary":"Get messaging settings","description":"Get current user's messaging settings.","operationId":"get_messaging_settings_api_v1_users__me_messaging_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagingSettingsResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["Users","Users"],"summary":"Update messaging settings","description":"Update current user's messaging settings.","operationId":"update_messaging_settings_api_v1_users__me_messaging_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagingSettingsUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagingSettingsResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers":{"get":{"tags":["Servers","Servers"],"summary":"List joined servers","description":"Get all servers the user is a member of.\n\nReturns a list of servers the authenticated user belongs to.","operationId":"get_servers_api_v1_servers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ServerResponse"},"type":"array","title":"Response Get Servers Api V1 Servers Get"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Servers","Servers"],"summary":"Create server","description":"Create a new server.\n\nCreates a server with the authenticated user as owner.","operationId":"create_server_api_v1_servers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerResponse"}}}},"400":{"description":"Limit reached or invalid data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}":{"get":{"tags":["Servers","Servers"],"summary":"Get server","description":"Get server by ID.\n\nReturns server information if the user is a member.","operationId":"get_server_api_v1_servers__server_id__get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerResponse"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Servers","Servers"],"summary":"Update server","description":"Update server settings.\n\nUpdates server information. Requires manage server permission.","operationId":"update_server_api_v1_servers__server_id__patch","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerResponse"}}}},"400":{"description":"Invalid server ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Servers","Servers"],"summary":"Delete server","description":"Delete a server.\n\nPermanently deletes the server. Only the owner can delete.","operationId":"delete_server_api_v1_servers__server_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/channels":{"get":{"tags":["Servers","Servers"],"summary":"List server channels","description":"Get all channels in a server.\n\nReturns channels the user has access to view.","operationId":"get_server_channels_api_v1_servers__server_id__channels_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChannelResponse"},"title":"Response Get Server Channels Api V1 Servers  Server Id  Channels Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Servers","Servers"],"summary":"Create channel","description":"Create a channel in a server.","operationId":"create_server_channel_api_v1_servers__server_id__channels_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelResponse"}}}},"400":{"description":"Invalid server ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/members":{"get":{"tags":["Servers","Servers"],"summary":"List server members","description":"Get server members (cached for 30s).","operationId":"get_server_members_api_v1_servers__server_id__members_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemberResponse"},"title":"Response Get Server Members Api V1 Servers  Server Id  Members Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/members/{member_id}":{"delete":{"tags":["Servers","Servers"],"summary":"Kick member","description":"Kick a member from a server.\n\nRemoves the member from the server. Requires kick members permission.","operationId":"kick_member_api_v1_servers__server_id__members__member_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","title":"Member Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/members/{member_id}/roles/{role_id}":{"put":{"tags":["Servers","Servers"],"summary":"Add role to member","description":"Assign a role to a member.\n\nAdds the specified role to the member. Requires manage roles permission.","operationId":"assign_role_to_member_api_v1_servers__server_id__members__member_id__roles__role_id__put","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","title":"Member Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Member or role not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Servers","Servers"],"summary":"Remove role from member","description":"Remove a role from a member.\n\nRemoves the specified role from the member. Requires manage roles permission.","operationId":"remove_role_from_member_api_v1_servers__server_id__members__member_id__roles__role_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","title":"Member Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Member or role not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/invites":{"get":{"tags":["Servers","Servers"],"summary":"List server invites","description":"Get all invites for a server.","operationId":"get_server_invites_api_v1_servers__server_id__invites_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InviteResponse"},"title":"Response Get Server Invites Api V1 Servers  Server Id  Invites Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/roles":{"get":{"tags":["Servers","Servers"],"summary":"List server roles","description":"Get all roles in a server.","operationId":"get_server_roles_api_v1_servers__server_id__roles_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RoleResponse"},"title":"Response Get Server Roles Api V1 Servers  Server Id  Roles Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Servers","Servers"],"summary":"Create role","description":"Create a new role in a server.\n\nCreates a new role with specified permissions. Requires manage roles permission.","operationId":"create_role_api_v1_servers__server_id__roles_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"400":{"description":"Invalid server ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/roles/{role_id}":{"patch":{"tags":["Servers","Servers"],"summary":"Update role","description":"Update a role in a server.\n\nModifies an existing role. Requires manage roles permission.","operationId":"update_role_api_v1_servers__server_id__roles__role_id__patch","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"400":{"description":"Invalid ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Role not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Servers","Servers"],"summary":"Delete role","description":"Delete a role from a server.\n\nRemoves the role from the server and all members. Requires manage roles permission.","operationId":"delete_role_api_v1_servers__server_id__roles__role_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Role not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/bans":{"get":{"tags":["Servers","Servers"],"summary":"List server bans","description":"Get all bans in a server.\n\nReturns a list of users who are banned from the server. Requires ban members permission.","operationId":"get_server_bans_api_v1_servers__server_id__bans_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BanResponse"},"title":"Response Get Server Bans Api V1 Servers  Server Id  Bans Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/bans/{user_id}":{"put":{"tags":["Servers","Servers"],"summary":"Ban user","description":"Ban a user from a server.\n\nPrevents a user from joining or seeing the server. Requires ban members permission.","operationId":"ban_member_api_v1_servers__server_id__bans__user_id__put","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BanCreateRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server or user not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Servers","Servers"],"summary":"Unban user","description":"Unban a user from a server.\n\nAllows a previously banned user to join the server again. Requires ban members permission.","operationId":"unban_member_api_v1_servers__server_id__bans__user_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server or ban not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/leave":{"post":{"tags":["Servers","Servers"],"summary":"Leave server","description":"Leave a server.\n\nRemoves the current user from the server. Owners cannot leave their own server.","operationId":"leave_server_api_v1_servers__server_id__leave_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Cannot leave as owner","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/permissions":{"get":{"tags":["Servers","Servers"],"summary":"Get my permissions","description":"Get current user's permissions in a server.","operationId":"get_my_permissions_api_v1_servers__server_id__permissions_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Get My Permissions Api V1 Servers  Server Id  Permissions Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/audit-logs":{"get":{"tags":["Servers","Servers"],"summary":"Get audit logs","description":"Get audit log entries for a server.\n\nReturns a list of administrative actions taken in the server. Requires view audit log permission.","operationId":"get_audit_log_api_v1_servers__server_id__audit_logs_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogEntryResponse"},"title":"Response Get Audit Log Api V1 Servers  Server Id  Audit Logs Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/automod/rules":{"get":{"tags":["Servers","Servers"],"summary":"Get server automod rules","description":"Get all automod rules for a server.","operationId":"get_server_automod_rules_api_v1_servers__server_id__automod_rules_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleResponse"},"title":"Response Get Server Automod Rules Api V1 Servers  Server Id  Automod Rules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Servers","Servers"],"summary":"Create server automod rule","description":"Create a new automod rule for a server.","operationId":"create_server_automod_rule_api_v1_servers__server_id__automod_rules_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/automod/rules/{rule_id}":{"patch":{"tags":["Servers","Servers"],"summary":"Update server automod rule","description":"Update an existing automod rule.","operationId":"update_server_automod_rule_api_v1_servers__server_id__automod_rules__rule_id__patch","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Servers","Servers"],"summary":"Delete server automod rule","description":"Delete an automod rule.","operationId":"delete_server_automod_rule_api_v1_servers__server_id__automod_rules__rule_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/automod/violations":{"get":{"tags":["Servers","Servers"],"summary":"Get server automod violations","description":"Get recent automod violations for a server.","operationId":"get_server_automod_violations_api_v1_servers__server_id__automod_violations_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AutomodViolationResponse"},"title":"Response Get Server Automod Violations Api V1 Servers  Server Id  Automod Violations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/webhooks":{"get":{"tags":["Servers","Servers"],"summary":"List server webhooks","description":"Get all webhooks in a server.\n\nReturns a list of webhooks created in the server. Requires manage webhooks permission.","operationId":"get_server_webhooks_api_v1_servers__server_id__webhooks_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/src__api__schemas__servers__WebhookResponse"},"title":"Response Get Server Webhooks Api V1 Servers  Server Id  Webhooks Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/icon":{"post":{"tags":["Servers","Servers"],"summary":"Upload server icon","description":"Upload a server icon.\n\nUploads and sets a new icon for the server. Requires manage server permission.","operationId":"upload_server_icon_api_v1_servers__server_id__icon_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_server_icon_api_v1_servers__server_id__icon_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerResponse"}}}},"400":{"description":"Invalid server ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/emojis":{"get":{"tags":["Emojis","Emojis"],"summary":"Get server emojis","description":"Get all custom emojis for a server.\n\nReturns a list of custom emojis available in the server.","operationId":"get_server_emojis_api_v1_servers__server_id__emojis_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmojiResponse"},"title":"Response Get Server Emojis Api V1 Servers  Server Id  Emojis Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not a member of this server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Emojis","Emojis"],"summary":"Create custom emoji","description":"Create a custom emoji for a server.\n\nUploads an image and creates a new custom emoji.\nRequires emojis.manage or server.manage permission.","operationId":"create_emoji_api_v1_servers__server_id__emojis_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_emoji_api_v1_servers__server_id__emojis_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmojiResponse"}}}},"400":{"description":"Invalid input or limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Emoji already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/emojis/counts":{"get":{"tags":["Emojis","Emojis"],"summary":"Get emoji counts","description":"Get emoji counts and limits for a server.\n\nReturns current emoji counts and maximum limits.","operationId":"get_emoji_counts_api_v1_servers__server_id__emojis_counts_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmojiCountsResponse"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not a member of this server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/emojis/{emoji_id}":{"get":{"tags":["Emojis","Emojis"],"summary":"Get specific emoji","description":"Get a specific custom emoji.\n\nReturns emoji details if found and user has access.","operationId":"get_emoji_api_v1_servers__server_id__emojis__emoji_id__get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"emoji_id","in":"path","required":true,"schema":{"type":"string","title":"Emoji Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmojiResponse"}}}},"400":{"description":"Invalid emoji ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Emoji not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Emojis","Emojis"],"summary":"Update custom emoji","description":"Update a custom emoji.\n\nCurrently only supports renaming the emoji.\nRequires emojis.manage or server.manage permission.","operationId":"update_emoji_api_v1_servers__server_id__emojis__emoji_id__patch","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"emoji_id","in":"path","required":true,"schema":{"type":"string","title":"Emoji Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmojiUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmojiResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Emoji not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Emoji name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Emojis","Emojis"],"summary":"Delete custom emoji","description":"Delete a custom emoji.\n\nPermanently removes the emoji from the server.\nRequires emojis.manage or server.manage permission.","operationId":"delete_emoji_api_v1_servers__server_id__emojis__emoji_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"emoji_id","in":"path","required":true,"schema":{"type":"string","title":"Emoji Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid emoji ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Emoji not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/messages":{"get":{"tags":["Messages","Messages"],"summary":"Get channel messages","description":"Get messages in a channel.\n\nReturns messages with pagination support.\nWorks for both server channels and DM conversations.","operationId":"get_channel_messages_api_v1_channels__channel_id__messages_get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Before"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageResponse"},"title":"Response Get Channel Messages Api V1 Channels  Channel Id  Messages Get"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Messages","Messages"],"summary":"Send message","description":"Send a message to a channel.\n\nCreates a new message in the specified channel.\nWorks for both server channels and DM conversations.","operationId":"send_channel_message_api_v1_channels__channel_id__messages_post","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Invalid channel ID or empty message","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/messages/search":{"get":{"tags":["Messages","Messages"],"summary":"Search messages","description":"Search messages in a channel by content.","operationId":"search_messages_api_v1_channels__channel_id__messages_search_get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"content","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Content"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageResponse"},"title":"Response Search Messages Api V1 Channels  Channel Id  Messages Search Get"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/messages/unread":{"get":{"tags":["Messages","Messages"],"summary":"Get unread count","description":"Get unread message count for a channel.","operationId":"get_unread_count_api_v1_channels__channel_id__messages_unread_get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnreadCountResponse"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/messages/ack":{"post":{"tags":["Messages","Messages"],"summary":"Acknowledge messages","description":"Mark messages as read in a channel (read receipts).\n\nIf message_id is provided, marks all messages up to and including that message as read.\nIf not provided, marks all messages in the channel as read.","operationId":"acknowledge_messages_api_v1_channels__channel_id__messages_ack_post","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Mark as read up to this message ID","title":"Message Id"},"description":"Mark as read up to this message ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AckResponse"}}}},"400":{"description":"Invalid channel ID or message ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/ack/bulk":{"post":{"tags":["Messages","Messages"],"summary":"Bulk acknowledge messages","description":"Mark messages as read in multiple channels at once.\n\nAccepts a dictionary mapping channel_id to optional message_id.","operationId":"acknowledge_messages_bulk_api_v1_channels_ack_bulk_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/messages/{message_id}":{"get":{"tags":["Messages","Messages"],"summary":"Get message","description":"Get a specific message by ID.","operationId":"get_message_api_v1_channels__channel_id__messages__message_id__get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Invalid channel ID or message ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Messages","Messages"],"summary":"Edit message","description":"Edit a message.\n\nUpdates the message content. Only the author can edit.","operationId":"edit_message_api_v1_channels__channel_id__messages__message_id__patch","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Invalid message or channel ID or content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Messages","Messages"],"summary":"Delete message","description":"Delete a message.\n\nDeletes the message. Author or moderators can delete.","operationId":"delete_message_api_v1_channels__channel_id__messages__message_id__delete","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid message ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/pins":{"get":{"tags":["Messages","Messages"],"summary":"Get pinned messages","description":"Get all pinned messages in a channel.","operationId":"get_pinned_messages_api_v1_channels__channel_id__pins_get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageResponse"},"title":"Response Get Pinned Messages Api V1 Channels  Channel Id  Pins Get"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/pins/{message_id}":{"put":{"tags":["Messages","Messages"],"summary":"Pin message","description":"Pin a message in a channel.","operationId":"pin_message_api_v1_channels__channel_id__pins__message_id__put","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid channel ID or message ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Messages","Messages"],"summary":"Unpin message","description":"Unpin a message from a channel.","operationId":"unpin_message_api_v1_channels__channel_id__pins__message_id__delete","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid channel ID or message ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/unread":{"get":{"tags":["Messages","Messages"],"summary":"Get all unread counts","description":"Get unread message counts for all conversations.","operationId":"get_all_unread_counts_api_v1_users__me_unread_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllUnreadCountsResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/channels/{channel_id}/typing":{"post":{"tags":["Messages","Messages"],"summary":"Trigger typing indicator","description":"Trigger typing indicator in a channel.\n\nBroadcasts a typing event to other users in the channel.\nWorks for both server channels and DM conversations.","operationId":"trigger_typing_api_v1_channels__channel_id__typing_post","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/messages":{"get":{"tags":["Search","Search"],"summary":"Search messages","description":"Search messages across accessible conversations.\nSupports advanced query filters (e.g., from:user, has:image).","operationId":"search_messages_api_v1_search_messages_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Query"},"description":"Search query"},{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Limit to conversation","title":"Conversation Id"},"description":"Limit to conversation"},{"name":"server_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Limit to server","title":"Server Id"},"description":"Limit to server"},{"name":"channel_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Limit to channel","title":"Channel Id"},"description":"Limit to channel"},{"name":"author_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Limit to author","title":"Author Id"},"description":"Limit to author"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for pagination","title":"Cursor"},"description":"Cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSearchPageResponse"}}}},"400":{"description":"Invalid query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/users":{"get":{"tags":["Search","Search"],"summary":"Search users","description":"Search for users across the platform or within a specific server.","operationId":"search_users_api_v1_search_users_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"Username or display name","title":"Query"},"description":"Username or display name"},{"name":"server_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Limit to server members","title":"Server Id"},"description":"Limit to server members"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for pagination","title":"Cursor"},"description":"Cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/servers":{"get":{"tags":["Search","Search"],"summary":"Search public servers","description":"Search for public servers to join.","operationId":"search_servers_api_v1_search_servers_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"Name, description, or tags","title":"Query"},"description":"Name, description, or tags"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for pagination","title":"Cursor"},"description":"Cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerSearchPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}":{"get":{"tags":["Channels","Channels"],"summary":"Get channel","description":"Get channel by ID.\n\nReturns channel information if the user has access.","operationId":"get_channel_api_v1_channels__channel_id__get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelResponse"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Channels","Channels"],"summary":"Update channel","description":"Update channel settings.\n\nUpdates channel information. Requires manage channels permission.","operationId":"update_channel_api_v1_channels__channel_id__patch","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelResponse"}}}},"400":{"description":"Invalid channel ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Channels","Channels"],"summary":"Delete channel","description":"Delete a channel.\n\nPermanently deletes the channel. Requires manage channels permission.","operationId":"delete_channel_api_v1_channels__channel_id__delete","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Delete Channel Api V1 Channels  Channel Id  Delete"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/webhooks":{"get":{"tags":["Channels","Channels"],"summary":"Get channel webhooks","description":"Get all webhooks for a channel.\n\nRequires manage webhooks permission.","operationId":"get_channel_webhooks_api_v1_channels__channel_id__webhooks_get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/src__api__schemas__servers__WebhookResponse"},"title":"Response Get Channel Webhooks Api V1 Channels  Channel Id  Webhooks Get"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/invites":{"post":{"tags":["Channels","Channels"],"summary":"Create channel invite","description":"Create an invite for a channel.\n\nRequires create instant invite permission.","operationId":"create_channel_invite_api_v1_channels__channel_id__invites_post","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelInviteCreateRequest","default":{"max_age":86400,"max_uses":0,"temporary":false}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelInviteResponse"}}}},"400":{"description":"Invalid channel ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/invites/{invite_code}":{"get":{"tags":["Channels","Channels"],"summary":"Get invite info","description":"Get invite information.\n\nReturns details about an invite without joining.","operationId":"get_invite_info_api_v1_channels_invites__invite_code__get","parameters":[{"name":"invite_code","in":"path","required":true,"schema":{"type":"string","title":"Invite Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteInfoResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Invite not found or expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Channels","Channels"],"summary":"Join server via invite","description":"Join a server via invite code.","operationId":"join_server_via_invite_api_v1_channels_invites__invite_code__post","parameters":[{"name":"invite_code","in":"path","required":true,"schema":{"type":"string","title":"Invite Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteJoinResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Banned from server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Invite not found or expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Already a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Channels","Channels"],"summary":"Delete invite","description":"Delete an invite.\n\nRequires manage server permission.","operationId":"delete_invite_api_v1_channels_invites__invite_code__delete","parameters":[{"name":"invite_code","in":"path","required":true,"schema":{"type":"string","title":"Invite Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Delete Invite Api V1 Channels Invites  Invite Code  Delete"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/attachments":{"post":{"tags":["Channels","Channels"],"summary":"Upload attachment","description":"Upload a file attachment to a channel.\n\nReturns the URL of the uploaded file.\nFile size limit is based on user's tier (alpha users get 25MB, premium 100MB, etc.)","operationId":"upload_attachment_api_v1_channels__channel_id__attachments_post","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_attachment_api_v1_channels__channel_id__attachments_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentUploadResponse"}}}},"400":{"description":"Invalid channel ID or file too large/unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/@me":{"get":{"tags":["Relationships","Relationships"],"summary":"Get relationships","description":"Get all relationships for current user (cached for 60s).\n\nReturns friends, pending requests, and blocked users with user info.","operationId":"get_relationships_api_v1_relationships__me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DetailedRelationshipInfo"},"type":"array","title":"Response Get Relationships Api V1 Relationships  Me Get"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/relationships":{"post":{"tags":["Relationships","Relationships"],"summary":"Create relationship","description":"Send a friend request.\n\nCreates a pending friend request to the specified user.","operationId":"create_relationship_api_v1_relationships_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendRequestCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipResponse"}}}},"400":{"description":"Invalid user ID or self-request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"User is blocked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Relationship already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/{user_id}/accept":{"put":{"tags":["Relationships","Relationships"],"summary":"Accept friend request","description":"Accept a friend request.\n\nAccepts a pending friend request from the specified user.","operationId":"accept_friend_request_api_v1_relationships__user_id__accept_put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid user ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Friend request not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/{user_id}":{"delete":{"tags":["Relationships","Relationships"],"summary":"Remove a relationship","description":"Remove a relationship.\n\nRemoves friend, declines request, or unblocks user.","operationId":"delete_relationship_api_v1_relationships__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid user ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Relationship not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/relationships/block":{"post":{"tags":["Relationships","Relationships"],"summary":"Block a user","description":"Block a user.\n\nBlocks the specified user, removing any existing relationship.","operationId":"block_user_api_v1_relationships_block_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipResponse"}}}},"400":{"description":"Invalid user ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Already blocked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/presence":{"put":{"tags":["Presence","Presence"],"summary":"Update my presence","description":"Update current user's presence.\n\nSets the user's online status and custom status message.","operationId":"update_presence_api_v1_users__me_presence_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresenceUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__presence__PresenceResponse"}}}},"400":{"description":"Invalid status or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/presence":{"get":{"tags":["Presence","Presence"],"summary":"Get user presence","description":"Get a user's presence.\n\nReturns the user's current online status and custom status.","operationId":"get_user_presence_api_v1_users__user_id__presence_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__presence__PresenceResponse"}}}},"400":{"description":"Invalid user ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}":{"put":{"tags":["Reactions","Reactions"],"summary":"Add reaction","description":"Add a reaction to a message.\n\nAdds the specified emoji reaction to the message.","operationId":"add_reaction_api_v1_channels__channel_id__messages__message_id__reactions__emoji__put","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"emoji","in":"path","required":true,"schema":{"type":"string","title":"Emoji"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid message ID or channel ID or emoji","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Reactions module not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Reactions","Reactions"],"summary":"Remove reaction","description":"Remove own reaction from a message.\n\nRemoves the specified emoji reaction from the message.","operationId":"remove_reaction_api_v1_channels__channel_id__messages__message_id__reactions__emoji__delete","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"emoji","in":"path","required":true,"schema":{"type":"string","title":"Emoji"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid message ID or channel ID or emoji","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Reactions module not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Reactions","Reactions"],"summary":"Get reaction users","description":"Get users who reacted with an emoji.\n\nReturns a list of users who added the specified reaction.","operationId":"get_reaction_users_api_v1_channels__channel_id__messages__message_id__reactions__emoji__get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"emoji","in":"path","required":true,"schema":{"type":"string","title":"Emoji"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReactionUserResponse"},"title":"Response Get Reaction Users Api V1 Channels  Channel Id  Messages  Message Id  Reactions  Emoji  Get"}}}},"400":{"description":"Invalid message ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}/messages/{message_id}/reactions":{"get":{"tags":["Reactions","Reactions"],"summary":"Get reactions","description":"Get all reactions on a message.\n\nReturns a list of all emoji reactions with counts.","operationId":"get_reactions_api_v1_channels__channel_id__messages__message_id__reactions_get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReactionResponse"},"title":"Response Get Reactions Api V1 Channels  Channel Id  Messages  Message Id  Reactions Get"}}}},"400":{"description":"Invalid message ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{webhook_id}/regenerate-token":{"post":{"tags":["Webhooks","Webhooks"],"summary":"Regenerate webhook token","description":"Generate a new secure token for a webhook.\n\nInvalidates the old token and returns the updated webhook with the new token.","operationId":"regenerate_webhook_token_api_v1_webhooks__webhook_id__regenerate_token_post","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__webhooks__WebhookResponse"}}}},"400":{"description":"Invalid webhook ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks":{"post":{"tags":["Webhooks","Webhooks"],"summary":"Create a webhook","description":"Create a new webhook.\n\nCreates a webhook for the specified channel. Returns the token only on creation.","operationId":"create_webhook_api_v1_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__webhooks__WebhookResponse"}}}},"400":{"description":"Invalid ID format or name/avatar too long","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{webhook_id}":{"get":{"tags":["Webhooks","Webhooks"],"summary":"Get a webhook","description":"Get webhook by ID.\n\nReturns webhook information without the token.","operationId":"get_webhook_api_v1_webhooks__webhook_id__get","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__webhooks__WebhookResponse"}}}},"400":{"description":"Invalid webhook ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Webhooks","Webhooks"],"summary":"Update a webhook","description":"Update a webhook.\n\nAllows changing name, avatar, or channel.","operationId":"update_webhook_api_v1_webhooks__webhook_id__patch","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__webhooks__WebhookResponse"}}}},"400":{"description":"Invalid webhook ID or name too long","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook or channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Webhooks","Webhooks"],"summary":"Delete a webhook","description":"Delete a webhook.","operationId":"delete_webhook_api_v1_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid webhook ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{webhook_id}/{token}":{"post":{"tags":["Webhooks","Webhooks"],"summary":"Execute a webhook","description":"Execute a webhook.\n\nSends a message to the webhook's channel using its token.","operationId":"execute_webhook_api_v1_webhooks__webhook_id___token__post","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"thread_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id"}},{"name":"wait","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Wait"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookExecuteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WebhookMessageResponse"},{"$ref":"#/components/schemas/SuccessResponse"}],"title":"Response Execute Webhook Api V1 Webhooks  Webhook Id   Token  Post"}}}},"400":{"description":"Invalid webhook ID or request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/settings":{"get":{"tags":["Settings","User Settings"],"summary":"Get all settings","description":"Get all settings for the current user.\n\nReturns all key-value pairs stored for the user.","operationId":"get_all_settings_api_v1_users__me_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/users/@me/settings/bulk":{"put":{"tags":["Settings","User Settings"],"summary":"Bulk update settings","description":"Update multiple settings at once.\n\nAccepts a dictionary of key-value pairs.","operationId":"bulk_update_settings_api_v1_users__me_settings_bulk_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/settings/{key}":{"get":{"tags":["Settings","User Settings"],"summary":"Get a specific setting","description":"Get a specific setting by key.\n\nReturns the setting value and metadata.","operationId":"get_setting_api_v1_users__me_settings__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Setting not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Settings","User Settings"],"summary":"Set a setting","description":"Set a setting value.\n\nCreates or updates the setting with the given key.","operationId":"set_setting_api_v1_users__me_settings__key__put","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingValue"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingResponse"}}}},"400":{"description":"Limit exceeded or invalid key/value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Settings","User Settings"],"summary":"Delete a setting","description":"Delete a setting.\n\nRemoves the setting with the given key.","operationId":"delete_setting_api_v1_users__me_settings__key__delete","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Setting not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback":{"post":{"tags":["Feedback","Feedback"],"summary":"Submit feedback","description":"Submit feedback.\n\nRate limited to prevent spam.","operationId":"submit_feedback_api_v1_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackResponse"}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid user token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many feedback submissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Feedback system unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/status":{"get":{"tags":["Feedback","Feedback"],"summary":"Get feedback status","description":"Get feedback submission status for current user.","operationId":"get_feedback_status_api_v1_feedback_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackStatusResponse"}}}},"401":{"description":"Invalid user token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/users/@me/notifications":{"get":{"tags":["Notifications","Notifications"],"summary":"Get my notifications","description":"Get user notifications.","operationId":"get_notifications_api_v1_users__me_notifications_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationsResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/@me/notifications/read-all":{"put":{"tags":["Notifications","Notifications"],"summary":"Mark all notifications as read","description":"Mark all user notifications as read.","operationId":"mark_all_read_api_v1_users__me_notifications_read_all_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}}}},"/api/v1/users/@me/notifications/{notification_id}/read":{"put":{"tags":["Notifications","Notifications"],"summary":"Mark notification as read","description":"Mark a specific notification as read.","operationId":"mark_read_api_v1_users__me_notifications__notification_id__read_put","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/telemetry/response-times":{"post":{"tags":["Telemetry","Telemetry"],"summary":"Submit response times","description":"Submit client-side response time data.\n\nData is stored for analysis of client-perceived performance.","operationId":"submit_response_times_api_v1_telemetry_response_times_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetrySubmission"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/telemetry/csp-report":{"post":{"tags":["Telemetry","Telemetry"],"summary":"Submit CSP violation report","description":"Submit a Content-Security-Policy violation report.\n\nThe browser sends this data when a CSP violation occurs.","operationId":"submit_csp_report_api_v1_telemetry_csp_report_post","responses":{"204":{"description":"Successful Response"}}}},"/api/v1/voice/ice-servers":{"get":{"tags":["Voice","Voice"],"summary":"Get ICE servers","description":"Get ICE server configuration for WebRTC.\n\nReturns STUN and TURN servers with credentials for establishing\npeer-to-peer connections through NAT/firewalls.","operationId":"get_ice_servers_api_v1_voice_ice_servers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ICEServersResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/voice/channels/{channel_id}/info":{"get":{"tags":["Voice","Voice"],"summary":"Get voice channel info","description":"Get voice channel connection info including ICE servers.","operationId":"get_voice_channel_info_api_v1_voice_channels__channel_id__info_get","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceChannelInfoResponse"}}}},"400":{"description":"Invalid channel ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not connected or forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Channel not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Voice signaling service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/polls":{"post":{"tags":["Polls","Polls"],"summary":"Create poll","description":"Create a new interactive poll attached to a message.","operationId":"create_poll_api_v1_polls_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollResponse"}}}},"400":{"description":"Invalid poll request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Message not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/polls/{poll_id}":{"get":{"tags":["Polls","Polls"],"summary":"Get poll","description":"Retrieve information about a specific poll.","operationId":"get_poll_api_v1_polls__poll_id__get","parameters":[{"name":"poll_id","in":"path","required":true,"schema":{"type":"string","title":"Poll Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollResponse"}}}},"400":{"description":"Invalid poll ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Poll not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Polls","Polls"],"summary":"Delete poll","description":"Permanently delete a poll and all associated votes.","operationId":"delete_poll_api_v1_polls__poll_id__delete","parameters":[{"name":"poll_id","in":"path","required":true,"schema":{"type":"string","title":"Poll Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid poll ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Poll not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/polls/{poll_id}/results":{"get":{"tags":["Polls","Polls"],"summary":"Get poll results","description":"Retrieve current voting results for a specific poll.","operationId":"get_poll_results_api_v1_polls__poll_id__results_get","parameters":[{"name":"poll_id","in":"path","required":true,"schema":{"type":"string","title":"Poll Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollResultsResponse"}}}},"400":{"description":"Invalid poll ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Poll not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/polls/{poll_id}/vote":{"post":{"tags":["Polls","Polls"],"summary":"Vote on poll","description":"Cast or update a vote on a specific poll.","operationId":"vote_on_poll_api_v1_polls__poll_id__vote_post","parameters":[{"name":"poll_id","in":"path","required":true,"schema":{"type":"string","title":"Poll Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollVoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollResultsResponse"}}}},"400":{"description":"Invalid poll vote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Poll not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/polls/{poll_id}/close":{"post":{"tags":["Polls","Polls"],"summary":"Close poll","description":"Manually end a poll, preventing further voting.","operationId":"close_poll_api_v1_polls__poll_id__close_post","parameters":[{"name":"poll_id","in":"path","required":true,"schema":{"type":"string","title":"Poll Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollResponse"}}}},"400":{"description":"Invalid poll request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Poll not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/login":{"post":{"tags":["Admin"],"summary":"Admin Login","description":"Authenticate an administrator.\n\nPerforms multi-step authentication including password verification and\noptional 2FA (TOTP) setup or verification based on server configuration.","operationId":"admin_login_api_v1_admin_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/verify-otp":{"post":{"tags":["Admin"],"summary":"Verify Otp","description":"Verify a TOTP code for admin login or setup.\n\nValidates the provided code against the challenge token to complete authentication.","operationId":"verify_otp_api_v1_admin_verify_otp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OTPVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/logout":{"post":{"tags":["Admin"],"summary":"Admin Logout","description":"Invalidate an administrator session.\n\nRevokes the current access token and clears associated session data.","operationId":"admin_logout_api_v1_admin_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}}}},"/api/v1/admin/auth/change-password":{"post":{"tags":["Admin"],"summary":"Admin Change Password","description":"Change the password for the current administrator.\n\nRequires verification of the current password before applying the new one.","operationId":"admin_change_password_api_v1_admin_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/auth/security-status":{"get":{"tags":["Admin"],"summary":"Admin Security Status","description":"Return the current admin account security settings and posture.","operationId":"admin_security_status_api_v1_admin_auth_security_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSecurityStatusResponse"}}}}}}},"/api/v1/admin/auth/2fa/begin-setup":{"post":{"tags":["Admin"],"summary":"Admin Begin Otp Setup","description":"Start a new OTP setup flow for the current admin account.","operationId":"admin_begin_otp_setup_api_v1_admin_auth_2fa_begin_setup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminOTPSetupBeginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/auth/2fa/disable":{"post":{"tags":["Admin"],"summary":"Admin Disable Otp","description":"Disable OTP for the current admin after password and OTP verification.","operationId":"admin_disable_otp_api_v1_admin_auth_2fa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminOTPDisableRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/auth/2fa/regenerate-backup-codes":{"post":{"tags":["Admin"],"summary":"Admin Regenerate Backup Codes","description":"Regenerate backup codes for the current admin.","operationId":"admin_regenerate_backup_codes_api_v1_admin_auth_2fa_regenerate_backup_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminOTPSetupBeginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBackupCodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/dashboard":{"get":{"tags":["Admin"],"summary":"Get Dashboard","description":"Retrieve overview statistics for the administrator dashboard.\n\nReturns a summary of system health, active sessions, and recent activity.","operationId":"get_dashboard_api_v1_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDashboardResponse"}}}}}}},"/api/v1/admin/tickets":{"get":{"tags":["Admin"],"summary":"Get Tickets","description":"Retrieve a list of user feedback tickets.\n\nAllows filtering by status and supports pagination.","operationId":"get_tickets_api_v1_admin_tickets_get","parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TicketResponse"},"title":"Response Get Tickets Api V1 Admin Tickets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tickets/{ticket_id}":{"get":{"tags":["Admin"],"summary":"Get Ticket","description":"Retrieve detailed information for a specific feedback ticket.","operationId":"get_ticket_api_v1_admin_tickets__ticket_id__get","parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tickets/{ticket_id}/status":{"patch":{"tags":["Admin"],"summary":"Update Ticket Status","description":"Update the processing status of a feedback ticket.","operationId":"update_ticket_status_api_v1_admin_tickets__ticket_id__status_patch","parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketStatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tickets/{ticket_id}/notes":{"get":{"tags":["Admin"],"summary":"Get Ticket Notes","description":"Retrieve all internal administrator notes associated with a ticket.","operationId":"get_ticket_notes_api_v1_admin_tickets__ticket_id__notes_get","parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteResponse"},"title":"Response Get Ticket Notes Api V1 Admin Tickets  Ticket Id  Notes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Add Ticket Note","description":"Add a new internal administrator note to a ticket.","operationId":"add_ticket_note_api_v1_admin_tickets__ticket_id__notes_post","parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalNoteCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/search":{"get":{"tags":["Admin"],"summary":"Admin User Search","description":"Search for users based on a query string.\n\nSupports matching by username or email and provides paginated results.","operationId":"admin_user_search_api_v1_admin_users_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/scheduled-deletions":{"get":{"tags":["Admin"],"summary":"Admin List Scheduled Deletions","description":"List all accounts currently in the 30-day grace period for deletion.","operationId":"admin_list_scheduled_deletions_api_v1_admin_users_scheduled_deletions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledDeletionListResponse"}}}}}}},"/api/v1/admin/users/{user_id}":{"get":{"tags":["Admin"],"summary":"Get User Details","description":"Retrieve comprehensive information for a specific user.","operationId":"get_user_details_api_v1_admin_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/tier":{"put":{"tags":["Features","User Features"],"summary":"Set user tier (Admin)","description":"Set rate limit tier for a user (admin only).","operationId":"set_user_tier_api_v1_admin_users__user_id__tier_put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTierRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeaturesResponse"}}}},"400":{"description":"Invalid user ID or tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/badges/{badge}":{"post":{"tags":["Features","User Features"],"summary":"Add user badge (Admin)","description":"Add a badge to a user (admin only).","operationId":"add_user_badge_api_v1_admin_users__user_id__badges__badge__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"badge","in":"path","required":true,"schema":{"type":"string","title":"Badge"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBadgeUpdateResponse"}}}},"400":{"description":"Invalid user ID or badge","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Features","User Features"],"summary":"Remove user badge (Admin)","description":"Remove a badge from a user (admin only).","operationId":"remove_user_badge_api_v1_admin_users__user_id__badges__badge__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"badge","in":"path","required":true,"schema":{"type":"string","title":"Badge"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBadgeUpdateResponse"}}}},"400":{"description":"Invalid user ID or badge","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/notes":{"get":{"tags":["Admin"],"summary":"Get User Notes","description":"Retrieve internal administrator notes for a specific user.","operationId":"get_user_notes_api_v1_admin_users__user_id__notes_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Update User Notes","description":"Update the internal administrator notes for a user.","operationId":"update_user_notes_api_v1_admin_users__user_id__notes_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/force-username-change":{"post":{"tags":["Admin"],"summary":"Admin Force Username Change","description":"Flag a user account to require a username change upon their next login.","operationId":"admin_force_username_change_api_v1_admin_users__user_id__force_username_change_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForceUsernameChangeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/cancel-deletion":{"post":{"tags":["Admin"],"summary":"Admin Cancel Account Deletion","description":"Cancel a scheduled account deletion and restore the account to 'active' status.","operationId":"admin_cancel_account_deletion_api_v1_admin_users__user_id__cancel_deletion_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/delay-deletion":{"post":{"tags":["Admin"],"summary":"Admin Delay Account Deletion","description":"Set a new deletion date for a scheduled account deletion.","operationId":"admin_delay_account_deletion_api_v1_admin_users__user_id__delay_deletion_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"deletion_at","in":"query","required":true,"schema":{"type":"integer","title":"Deletion At"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/force-purge":{"post":{"tags":["Admin"],"summary":"Admin Force Purge Account","description":"Immediately purge a user account, bypassing the grace period.\nThis is irreversible and should only be used in extreme cases.","operationId":"admin_force_purge_account_api_v1_admin_users__user_id__force_purge_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/blocked-ips":{"get":{"tags":["Admin"],"summary":"Get Blocked Ips","description":"Retrieve a list of all currently blocked IP addresses.","operationId":"get_blocked_ips_api_v1_admin_security_blocked_ips_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BlockedIPResponse"},"type":"array","title":"Response Get Blocked Ips Api V1 Admin Security Blocked Ips Get"}}}}}}},"/api/v1/admin/security/block-ip":{"post":{"tags":["Admin"],"summary":"Block Ip","description":"Block a specific IP address from accessing the platform.","operationId":"block_ip_api_v1_admin_security_block_ip_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPBlockRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/access-tokens":{"get":{"tags":["Admin"],"summary":"List Access Tokens","description":"List all API access tokens created by administrators.","operationId":"list_access_tokens_api_v1_admin_security_access_tokens_get","parameters":[{"name":"include_revoked","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Revoked"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccessTokenResponse"},"title":"Response List Access Tokens Api V1 Admin Security Access Tokens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Create Access Token","description":"Create a new permanent API access token for administrative use.","operationId":"create_access_token_api_v1_admin_security_access_tokens_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/access-tokens/{token_id}":{"get":{"tags":["Admin"],"summary":"Get Access Token Detail","description":"Get detailed usage and policy information for a specific API access token.","operationId":"get_access_token_detail_api_v1_admin_security_access_tokens__token_id__get","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}},{"name":"recent_limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Recent Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin"],"summary":"Update Access Token","description":"Update metadata, expiry, or scope mode for a specific API access token.","operationId":"update_access_token_api_v1_admin_security_access_tokens__token_id__patch","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/access-tokens/{token_id}/rotate":{"post":{"tags":["Admin"],"summary":"Rotate Access Token","description":"Rotate an API access token, cloning policy and scopes into a replacement.","operationId":"rotate_access_token_api_v1_admin_security_access_tokens__token_id__rotate_post","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenRotateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/access-tokens/{token_id}/scopes":{"post":{"tags":["Admin"],"summary":"Add Access Token Scope","description":"Add an IP or CIDR scope rule to an API access token.","operationId":"add_access_token_scope_api_v1_admin_security_access_tokens__token_id__scopes_post","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenScopeCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenScopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/access-tokens/{token_id}/scopes/{scope_id}":{"delete":{"tags":["Admin"],"summary":"Remove Access Token Scope","description":"Remove an IP or CIDR scope rule from an API access token.","operationId":"remove_access_token_scope_api_v1_admin_security_access_tokens__token_id__scopes__scope_id__delete","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}},{"name":"scope_id","in":"path","required":true,"schema":{"type":"integer","title":"Scope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/access-tokens/{token_id}/revoke":{"post":{"tags":["Admin"],"summary":"Revoke Access Token","description":"Revoke a specific API access token.","operationId":"revoke_access_token_api_v1_admin_security_access_tokens__token_id__revoke_post","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/unblock-ip/{ip_address}":{"delete":{"tags":["Admin"],"summary":"Unblock Ip","description":"Remove an IP address from the blocklist.","operationId":"unblock_ip_api_v1_admin_security_unblock_ip__ip_address__delete","parameters":[{"name":"ip_address","in":"path","required":true,"schema":{"type":"string","title":"Ip Address"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/banned-usernames":{"get":{"tags":["Admin"],"summary":"Get Banned Usernames","description":"Retrieve the list of patterns used to ban specific usernames.","operationId":"get_banned_usernames_api_v1_admin_security_banned_usernames_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BannedUsernameResponse"},"type":"array","title":"Response Get Banned Usernames Api V1 Admin Security Banned Usernames Get"}}}}}},"post":{"tags":["Admin"],"summary":"Add Banned Username","description":"Add a new pattern to the list of banned usernames.","operationId":"add_banned_username_api_v1_admin_security_banned_usernames_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BannedUsernameCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/banned-usernames/{pattern_id}":{"delete":{"tags":["Admin"],"summary":"Remove Banned Username","description":"Remove a pattern from the list of banned usernames.","operationId":"remove_banned_username_api_v1_admin_security_banned_usernames__pattern_id__delete","parameters":[{"name":"pattern_id","in":"path","required":true,"schema":{"type":"integer","title":"Pattern Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/force-logout":{"post":{"tags":["Admin"],"summary":"Force Logout","description":"Immediately invalidate all active sessions for a specific user.","operationId":"force_logout_api_v1_admin_security_force_logout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForceLogoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/lock-user":{"post":{"tags":["Admin"],"summary":"Admin Lock User","description":"Lock a user account, preventing all access for a specified duration.","operationId":"admin_lock_user_api_v1_admin_security_lock_user_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLockRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/unlock-user":{"post":{"tags":["Admin"],"summary":"Admin Unlock User","description":"Unlock a previously locked user account.","operationId":"admin_unlock_user_api_v1_admin_security_unlock_user_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForceLogoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/logout-all":{"post":{"tags":["Admin"],"summary":"Logout All Users","description":"Invalidate all active sessions for every user on the platform.","operationId":"logout_all_users_api_v1_admin_security_logout_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}}}},"/api/v1/admin/hash-reports":{"get":{"tags":["Admin"],"summary":"Get Hash Reports","description":"Retrieve a list of content hash reports for review.\n\nAllows filtering by status and supports pagination.","operationId":"get_hash_reports_api_v1_admin_hash_reports_get","parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/src__api__schemas__admin__HashReportResponse"},"title":"Response Get Hash Reports Api V1 Admin Hash Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/hash-reports/counts":{"get":{"tags":["Admin"],"summary":"Get Hash Report Counts","description":"Get the total number of content hash reports, grouped by status.","operationId":"get_hash_report_counts_api_v1_admin_hash_reports_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashReportCountsResponse"}}}}}}},"/api/v1/admin/hash-reports/{report_id}/review":{"post":{"tags":["Admin"],"summary":"Review Hash Report","description":"Submit a review for a specific content hash report.\n\nUpdates the report status and optionally takes action against the reported content.","operationId":"review_hash_report_api_v1_admin_hash_reports__report_id__review_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashReportReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashReportReviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/message-reports":{"get":{"tags":["Admin"],"summary":"Get Message Reports","description":"Retrieve message reports for admin review.","operationId":"get_message_reports_api_v1_admin_message_reports_get","parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageReportResponse"},"title":"Response Get Message Reports Api V1 Admin Message Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/message-reports/counts":{"get":{"tags":["Admin"],"summary":"Get Message Report Counts","description":"Get message report counts grouped by status.","operationId":"get_message_report_counts_api_v1_admin_message_reports_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationReportCountsResponse"}}}}}}},"/api/v1/admin/message-reports/{report_id}/review":{"post":{"tags":["Admin"],"summary":"Review Message Report","description":"Review a specific message report.","operationId":"review_message_report_api_v1_admin_message_reports__report_id__review_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationReportReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationReportReviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-reports":{"get":{"tags":["Admin"],"summary":"Get User Reports","description":"Retrieve user behavior reports for admin review.","operationId":"get_user_reports_api_v1_admin_user_reports_get","parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserReportResponse"},"title":"Response Get User Reports Api V1 Admin User Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-reports/counts":{"get":{"tags":["Admin"],"summary":"Get User Report Counts","description":"Get user report counts grouped by status.","operationId":"get_user_report_counts_api_v1_admin_user_reports_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationReportCountsResponse"}}}}}}},"/api/v1/admin/user-reports/{report_id}/review":{"post":{"tags":["Admin"],"summary":"Review User Report","description":"Review a specific user report.","operationId":"review_user_report_api_v1_admin_user_reports__report_id__review_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"integer","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationReportReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationReportReviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/blocked-hashes":{"get":{"tags":["Admin"],"summary":"Get Blocked Hashes","description":"List all currently blocked content hashes.","operationId":"get_blocked_hashes_api_v1_admin_blocked_hashes_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockedHashResponse"},"title":"Response Get Blocked Hashes Api V1 Admin Blocked Hashes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Block Hash Manually","description":"Manually add a content hash to the blocklist.","operationId":"block_hash_manually_api_v1_admin_blocked_hashes_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualBlockHashRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockHashResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/blocked-hashes/{hash_value}":{"delete":{"tags":["Admin"],"summary":"Unblock Hash","description":"Remove a content hash from the blocklist.","operationId":"unblock_hash_api_v1_admin_blocked_hashes__hash_value__delete","parameters":[{"name":"hash_value","in":"path","required":true,"schema":{"type":"string","title":"Hash Value"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/blocked-users":{"get":{"tags":["Admin"],"summary":"Get Blocked Users","description":"Retrieve a list of all currently blocked or banned users.","operationId":"get_blocked_users_api_v1_admin_blocked_users_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockedUserResponse"},"title":"Response Get Blocked Users Api V1 Admin Blocked Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Block User","description":"Block or ban a specific user from the platform.","operationId":"block_user_api_v1_admin_blocked_users_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockUserRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockUserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/blocked-users/{user_id}":{"delete":{"tags":["Admin"],"summary":"Unblock User","description":"Lift a block or ban from a specific user.","operationId":"unblock_user_api_v1_admin_blocked_users__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/automod/rules":{"get":{"tags":["Admin"],"summary":"Get Automod Rules","description":"Retrieve the list of AutoMod rules configured for a specific server.","operationId":"get_automod_rules_api_v1_admin_automod_rules_get","parameters":[{"name":"server_id","in":"query","required":true,"schema":{"type":"integer","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleResponse"},"title":"Response Get Automod Rules Api V1 Admin Automod Rules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Create Automod Rule","description":"Create a new AutoMod rule for a server.","operationId":"create_automod_rule_api_v1_admin_automod_rules_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/automod/rules/{rule_id}":{"patch":{"tags":["Admin"],"summary":"Update Automod Rule","description":"Update an existing AutoMod rule.","operationId":"update_automod_rule_api_v1_admin_automod_rules__rule_id__patch","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Delete Automod Rule","description":"Permanently delete an AutoMod rule.","operationId":"delete_automod_rule_api_v1_admin_automod_rules__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/automod/config":{"get":{"tags":["Admin"],"summary":"Get Automod Config","description":"Retrieve the global configuration settings for the AutoMod system.","operationId":"get_automod_config_api_v1_admin_automod_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomodConfigResponse"}}}}}},"put":{"tags":["Admin"],"summary":"Update Automod Config","description":"Update the global AutoMod configuration settings.","operationId":"update_automod_config_api_v1_admin_automod_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomodConfigUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomodConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/telemetry/stats":{"get":{"tags":["Admin"],"summary":"Get Telemetry Stats","description":"Retrieve aggregated performance statistics for API endpoints.\n\nProvides latency percentiles, error rates, and database query metrics.","operationId":"get_telemetry_stats_api_v1_admin_telemetry_stats_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}},{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/telemetry/history":{"get":{"tags":["Admin"],"summary":"Get Telemetry History","description":"Retrieve historical latency data for a specific endpoint.\n\nReturns data points grouped into time buckets for trend analysis.","operationId":"get_telemetry_history_api_v1_admin_telemetry_history_get","parameters":[{"name":"endpoint","in":"query","required":true,"schema":{"type":"string","title":"Endpoint"}},{"name":"method","in":"query","required":false,"schema":{"type":"string","default":"GET","title":"Method"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}},{"name":"bucket_minutes","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Bucket Minutes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/telemetry/reset":{"post":{"tags":["Admin"],"summary":"Reset Telemetry Stats","description":"Clear all collected telemetry data from the system.","operationId":"reset_telemetry_stats_api_v1_admin_telemetry_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResetResponse"}}}}}}},"/api/v1/admin/telemetry/export":{"get":{"tags":["Admin"],"summary":"Export Telemetry Stats","description":"Export system telemetry data in JSON, CSV, or plain text format.\n\nRequires header-based admin authentication.","operationId":"export_telemetry_stats_api_v1_admin_telemetry_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/logs":{"get":{"tags":["Admin"],"summary":"List Admin Logs","description":"List all available system log files.\n\nReturns a list of log file names, sizes, and last modification times.","operationId":"list_admin_logs_api_v1_admin_logs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LogFileInfo"},"type":"array","title":"Response List Admin Logs Api V1 Admin Logs Get"}}}}}}},"/api/v1/admin/logs/{filename}":{"get":{"tags":["Admin"],"summary":"Read Admin Log","description":"Read the contents of a specific log file.\n\nSupports pagination, filtering by log level, and text searching within the log.","operationId":"read_admin_log_api_v1_admin_logs__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":1000,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogViewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/pool-health":{"get":{"tags":["Admin"],"summary":"Get Db Pool Health","description":"Retrieve the current health and connection pool statistics for the database.\n\nProvides information on active, idle, and total connections.","operationId":"get_db_pool_health_api_v1_admin_database_pool_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/users/{user_id}/features":{"get":{"tags":["Features","User Features"],"summary":"Get user features (Admin)","description":"Get features for a specific user (admin only).\n\nReturns feature flags, badges, and tier information.","operationId":"get_user_features_api_v1_admin_users__user_id__features_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeaturesResponse"}}}},"400":{"description":"Invalid user ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Features","User Features"],"summary":"Update user features (Admin)","description":"Update features for a specific user (admin only).\n\nCan update feature flags, tier, and expiration.","operationId":"update_user_features_api_v1_admin_users__user_id__features_put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeaturesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeaturesResponse"}}}},"400":{"description":"Invalid user ID or data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tiers":{"get":{"tags":["Features","User Features"],"summary":"Get available tiers (Admin)","description":"Get all available rate limit tiers (admin only).","operationId":"get_available_tiers_api_v1_admin_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TiersResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/admin/badges":{"get":{"tags":["Features","User Features"],"summary":"Get available badges (Admin)","description":"Get all available badges (admin only).","operationId":"get_available_badges_api_v1_admin_badges_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgesResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/users/@me/features":{"get":{"tags":["Features","User Features"],"summary":"Get my features","description":"Get current user's features and badges.\n\nReturns badges with display info and tier limits.","operationId":"get_my_features_api_v1_users__me_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicFeaturesResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/avatars/users/{user_id}":{"get":{"tags":["Avatars","Avatars"],"summary":"Get user avatar","description":"Get user avatar image.\n\nReturns the avatar image bytes with appropriate content type.","operationId":"get_user_avatar_api_v1_avatars_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"The user avatar image file","content":{"application/json":{"schema":{}},"image/png":{},"image/jpeg":{},"image/gif":{},"image/webp":{},"image/svg+xml":{}}},"400":{"description":"Invalid user ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Avatar not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/avatars/users/@me":{"post":{"tags":["Avatars","Avatars"],"summary":"Upload my avatar","description":"Upload current user's avatar.\n\nAccepts image file upload and stores it in the database.","operationId":"upload_my_avatar_api_v1_avatars_users__me_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_my_avatar_api_v1_avatars_users__me_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvatarUploadResponse"}}}},"400":{"description":"Invalid file type or read error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid user token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Avatars","Avatars"],"summary":"Delete my avatar","description":"Delete current user's avatar.","operationId":"delete_my_avatar_api_v1_avatars_users__me_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Invalid user token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/avatars/servers/{server_id}":{"get":{"tags":["Avatars","Avatars"],"summary":"Get server icon","description":"Get server icon image.\n\nReturns the icon image bytes with appropriate content type.","operationId":"get_server_icon_api_v1_avatars_servers__server_id__get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"The server icon image file","content":{"application/json":{"schema":{}},"image/png":{},"image/jpeg":{},"image/gif":{},"image/webp":{}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Icon not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Avatars","Avatars"],"summary":"Upload server icon","description":"Upload server icon.\n\nRequires server ownership or MANAGE_SERVER permission.","operationId":"upload_server_icon_api_v1_avatars_servers__server_id__post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_server_icon_api_v1_avatars_servers__server_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IconUploadResponse"}}}},"400":{"description":"Invalid file type or read error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid user token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Avatars","Avatars"],"summary":"Delete server icon","description":"Delete server icon.\n\nRequires server ownership or MANAGE_SERVER permission.","operationId":"delete_server_icon_api_v1_avatars_servers__server_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Invalid user token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Server not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/report":{"post":{"tags":["Media","Media"],"summary":"Report content hash","description":"Report a file hash for content moderation.\n\nThis allows users to report potentially harmful content by its hash.\nMultiple reports on the same hash may trigger automatic blocking.\nSupports both SHA-256 and perceptual hashes for image similarity detection.","operationId":"report_content_hash_api_v1_media_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__media__HashReportResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/hash/{hash_value}/status":{"get":{"tags":["Media","Media"],"summary":"Check hash status","description":"Check if a hash is blocked.","operationId":"check_hash_status_api_v1_media_hash__hash_value__status_get","parameters":[{"name":"hash_value","in":"path","required":true,"schema":{"type":"string","title":"Hash Value"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashStatusResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload/session":{"post":{"tags":["Media","Media"],"summary":"Create upload session","description":"Create a chunked upload session for large files.\n\nReturns session details including chunk size and total chunks.\nUse the session_id to upload chunks via POST /media/upload/chunk.","operationId":"create_upload_session_api_v1_media_upload_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChunkedUploadSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChunkedUploadSessionResponse"}}}},"400":{"description":"Invalid request or file too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload/chunk/{session_id}":{"post":{"tags":["Media","Media"],"summary":"Upload chunk","description":"Upload a chunk to an existing upload session.\n\nArgs:\n    session_id: The upload session ID\n    chunk_index: Zero-based index of this chunk\n    chunk_checksum: Optional MD5 checksum for verification\n    file: The chunk data","operationId":"upload_chunk_api_v1_media_upload_chunk__session_id__post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"chunk_index","in":"query","required":true,"schema":{"type":"integer","title":"Chunk Index"}},{"name":"chunk_checksum","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chunk Checksum"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_chunk_api_v1_media_upload_chunk__session_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChunkUploadResponse"}}}},"400":{"description":"Invalid chunk or session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload/complete/{session_id}":{"post":{"tags":["Media","Media"],"summary":"Complete upload session","description":"Complete a chunked upload session and process the file.\n\nReturns the final upload result with file URL.","operationId":"complete_upload_session_api_v1_media_upload_complete__session_id__post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteUploadResponse"}}}},"400":{"description":"Upload session not complete or not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload/session/{session_id}":{"delete":{"tags":["Media","Media"],"summary":"Cancel upload session","description":"Cancel an upload session and clean up resources.","operationId":"cancel_upload_session_api_v1_media_upload_session__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Session not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload/sessions":{"get":{"tags":["Media","Media"],"summary":"Get my upload sessions","description":"Get all active upload sessions for the current user.","operationId":"get_user_upload_sessions_api_v1_media_upload_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadSessionsResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/media/compression/status":{"get":{"tags":["Media","Media"],"summary":"Get compression status","description":"Get compression system status.","operationId":"get_compression_status_api_v1_media_compression_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompressionStatusResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/reports/messages":{"post":{"tags":["Reports","Reports"],"summary":"Report a message","description":"Report a message for content moderation.\n\nReports are reviewed by moderators/admins.","operationId":"report_message_api_v1_reports_messages_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportResponse"}}}},"400":{"description":"Invalid ID format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/users":{"post":{"tags":["Reports","Reports"],"summary":"Report a user","description":"Report a user for behavior issues.\n\nReports are reviewed by moderators/admins.","operationId":"report_user_api_v1_reports_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportResponse"}}}},"400":{"description":"Invalid user ID or reporting yourself","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/qr":{"get":{"tags":["Utilities","Utilities"],"summary":"Generate QR code","description":"Generate a QR code image locally.\n\nThis replaces external services like qrserver.com for better privacy and reliability.","operationId":"generate_qr_api_v1_qr_get","parameters":[{"name":"data","in":"query","required":true,"schema":{"type":"string","description":"The data to encode in the QR code","title":"Data"},"description":"The data to encode in the QR code"},{"name":"size","in":"query","required":false,"schema":{"type":"string","description":"Size of the image in pixels (e.g., 200x200)","default":"200x200","title":"Size"},"description":"Size of the image in pixels (e.g., 200x200)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Image format (png or jpg)","default":"png","title":"Format"},"description":"Image format (png or jpg)"}],"responses":{"200":{"description":"The generated QR code image","content":{"application/json":{"schema":{}},"image/png":{},"image/jpeg":{}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/servers/{server_id}/stickers":{"get":{"tags":["Stickers","Stickers"],"summary":"Get server stickers","description":"Get all sticker packs for a server.","operationId":"get_server_stickers_api_v1_servers__server_id__stickers_get","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StickerPackResponse"},"title":"Response Get Server Stickers Api V1 Servers  Server Id  Stickers Get"}}}},"400":{"description":"Invalid server ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not a member of this server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Stickers","Stickers"],"summary":"Create custom sticker","description":"Create a custom sticker for a server.","operationId":"create_sticker_api_v1_servers__server_id__stickers_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_sticker_api_v1_servers__server_id__stickers_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StickerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stickers/{sticker_id}":{"delete":{"tags":["Stickers","Stickers"],"summary":"Delete sticker","description":"Delete a sticker.","operationId":"delete_sticker_api_v1_stickers__sticker_id__delete","parameters":[{"name":"sticker_id","in":"path","required":true,"schema":{"type":"string","title":"Sticker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stickers/{sticker_id}/send":{"post":{"tags":["Stickers","Stickers"],"summary":"Track sticker usage","description":"Record sticker usage.","operationId":"send_sticker_usage_api_v1_stickers__sticker_id__send_post","parameters":[{"name":"sticker_id","in":"path","required":true,"schema":{"type":"string","title":"Sticker Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_send_sticker_usage_api_v1_stickers__sticker_id__send_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stickers/suggestions":{"get":{"tags":["Stickers","Stickers"],"summary":"Get sticker suggestions","description":"Get sticker suggestions based on text content.","operationId":"get_sticker_suggestions_api_v1_stickers_suggestions_get","parameters":[{"name":"content","in":"query","required":true,"schema":{"type":"string","title":"Content"}},{"name":"server_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StickerResponse"},"title":"Response Get Sticker Suggestions Api V1 Stickers Suggestions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/help/security-logout":{"get":{"tags":["Help","Help"],"summary":"Security Logout Help","description":"Help page explaining security logouts.","operationId":"security_logout_help_api_v1_help_security_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/help/access-blocked":{"get":{"tags":["Help","Help"],"summary":"Access Blocked Help","description":"Help page explaining IP blocks.","operationId":"access_blocked_help_api_v1_help_access_blocked_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Index","description":"Serve the documentation homepage.","operationId":"docs_index_docs_api__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Index","description":"Serve the documentation homepage.","operationId":"docs_index_docs_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/getting-started":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Getting Started","description":"Serve the 'Getting Started' documentation page.","operationId":"docs_getting_started_docs_api_getting_started_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/deployment":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Deployment","description":"Serve the 'Deployment' documentation page.","operationId":"docs_deployment_docs_api_deployment_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/configuration":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Configuration","description":"Serve the 'Configuration' documentation page.","operationId":"docs_configuration_docs_api_configuration_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/features":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Features","description":"Serve the feature overview page.","operationId":"docs_features_docs_api_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/permissions":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Permissions","description":"Serve the permissions reference page.","operationId":"docs_permissions_docs_api_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/security":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Security","description":"Serve the security guidance page.","operationId":"docs_security_docs_api_security_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/performance":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Performance","description":"Serve the performance guidance page.","operationId":"docs_performance_docs_api_performance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/admin-access-tokens":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Admin Access Tokens","description":"Serve the API access token page.","operationId":"docs_admin_access_tokens_docs_api_admin_access_tokens_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/oauth-scopes":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Oauth Scopes","description":"Serve the OAuth scopes reference page.","operationId":"docs_oauth_scopes_docs_api_oauth_scopes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/reference":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Api Reference","description":"Serve the API reference index page.","operationId":"docs_api_reference_docs_api_reference_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/reference/{page}":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Api Page","description":"Serve a specific API reference documentation page.","operationId":"docs_api_page_docs_api_reference__page__get","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/docs/api/websocket":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Websocket Index","description":"Serve the WebSocket documentation index page.","operationId":"docs_websocket_index_docs_api_websocket_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/websocket/{page}":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Websocket Page","description":"Serve a specific WebSocket documentation page.","operationId":"docs_websocket_page_docs_api_websocket__page__get","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/docs/api/rate-limits":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Rate Limits","description":"Serve the rate limits documentation page.","operationId":"docs_rate_limits_docs_api_rate_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/errors":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Errors","description":"Serve the 'Errors' documentation page.","operationId":"docs_errors_docs_api_errors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/security-logout":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Security Logout","description":"Serve the 'Security Logout' documentation page.","operationId":"docs_security_logout_docs_api_security_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/access-blocked":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Access Blocked","description":"Serve the 'Access Blocked' documentation page.","operationId":"docs_access_blocked_docs_api_access_blocked_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/api/data-types":{"get":{"tags":["Documentation","Documentation"],"summary":"Docs Data Types","description":"Serve the 'Data Types' documentation page.","operationId":"docs_data_types_docs_api_data_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"tags":["System"],"summary":"API Root","description":"Root endpoint with API information.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__api__schemas__common__RootResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/health":{"get":{"tags":["System"],"summary":"Health Check","description":"Redirect or proxy to health check endpoint.","operationId":"health_redirect_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/media/attachments/{filename}":{"get":{"tags":["Media"],"summary":"Serve attachment","description":"Serve uploaded attachment files. Handles local and S3 storage with redirect optimization.","operationId":"serve_attachment_api_v1_media_attachments__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"The attachment file content","content":{"application/json":{"schema":{}},"application/octet-stream":{}}},"307":{"description":"Redirect to S3 storage"},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"File not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccessTokenCreateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"token":{"anyOf":[{"type":"string","maxLength":128,"minLength":32},{"type":"null"}],"title":"Token"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Unix timestamp when token expires"},"scope_mode":{"type":"string","pattern":"^(none|monitor|enforce)$","title":"Scope Mode","description":"IP scope enforcement mode","default":"none"}},"type":"object","title":"AccessTokenCreateRequest"},"AccessTokenCreateResponse":{"properties":{"token":{"type":"string","title":"Token"},"access_token":{"$ref":"#/components/schemas/AccessTokenResponse"}},"type":"object","required":["token","access_token"],"title":"AccessTokenCreateResponse"},"AccessTokenDetailResponse":{"properties":{"access_token":{"$ref":"#/components/schemas/AccessTokenResponse"},"scopes":{"items":{"$ref":"#/components/schemas/AccessTokenScopeResponse"},"type":"array","title":"Scopes"},"recent_events":{"items":{"$ref":"#/components/schemas/AccessTokenUsageEventResponse"},"type":"array","title":"Recent Events"},"top_ips":{"items":{"$ref":"#/components/schemas/AccessTokenUsageIPResponse"},"type":"array","title":"Top Ips"},"top_paths":{"items":{"$ref":"#/components/schemas/AccessTokenUsagePathResponse"},"type":"array","title":"Top Paths"},"total_events":{"type":"integer","title":"Total Events"},"distinct_ip_count":{"type":"integer","title":"Distinct Ip Count"},"denied_count_total":{"type":"integer","title":"Denied Count Total"}},"type":"object","required":["access_token","scopes","recent_events","top_ips","top_paths","total_events","distinct_ip_count","denied_count_total"],"title":"AccessTokenDetailResponse"},"AccessTokenResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"integer","title":"Created At"},"first_used_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Used At"},"last_used_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Used At"},"last_used_ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used Ip Address"},"last_used_user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used User Agent"},"last_used_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used Path"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At"},"scope_mode":{"type":"string","title":"Scope Mode"},"use_count_total":{"type":"integer","title":"Use Count Total"},"distinct_ip_count":{"type":"integer","title":"Distinct Ip Count"},"denied_count_total":{"type":"integer","title":"Denied Count Total"},"revoked":{"type":"boolean","title":"Revoked"},"revoked_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revoked At"},"revoked_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked By"}},"type":"object","required":["id","name","description","created_by","created_at","first_used_at","last_used_at","last_used_ip_address","last_used_user_agent","last_used_path","expires_at","scope_mode","use_count_total","distinct_ip_count","denied_count_total","revoked","revoked_at","revoked_by"],"title":"AccessTokenResponse"},"AccessTokenRotateRequest":{"properties":{"token":{"anyOf":[{"type":"string","maxLength":128,"minLength":32},{"type":"null"}],"title":"Token"}},"type":"object","title":"AccessTokenRotateRequest"},"AccessTokenScopeCreateRequest":{"properties":{"scope_type":{"type":"string","pattern":"^(ip|cidr)$","title":"Scope Type"},"value":{"type":"string","maxLength":128,"minLength":1,"title":"Value"}},"type":"object","required":["scope_type","value"],"title":"AccessTokenScopeCreateRequest"},"AccessTokenScopeResponse":{"properties":{"id":{"type":"string","title":"Id"},"scope_type":{"type":"string","title":"Scope Type"},"value":{"type":"string","title":"Value"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"integer","title":"Created At"}},"type":"object","required":["id","scope_type","value","created_by","created_at"],"title":"AccessTokenScopeResponse"},"AccessTokenUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At"},"clear_expiry":{"type":"boolean","title":"Clear Expiry","default":false},"scope_mode":{"anyOf":[{"type":"string","pattern":"^(none|monitor|enforce)$"},{"type":"null"}],"title":"Scope Mode","description":"IP scope enforcement mode"}},"type":"object","title":"AccessTokenUpdateRequest"},"AccessTokenUsageEventResponse":{"properties":{"id":{"type":"string","title":"Id"},"used_at":{"type":"integer","title":"Used At"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"allowed":{"type":"boolean","title":"Allowed"},"scope_match":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Scope Match"},"reject_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reject Reason"}},"type":"object","required":["id","used_at","ip_address","method","path","user_agent","allowed","scope_match","reject_reason"],"title":"AccessTokenUsageEventResponse"},"AccessTokenUsageIPResponse":{"properties":{"ip_address":{"type":"string","title":"Ip Address"},"request_count":{"type":"integer","title":"Request Count"},"denied_count":{"type":"integer","title":"Denied Count"},"last_seen_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Seen At"}},"type":"object","required":["ip_address","request_count","denied_count","last_seen_at"],"title":"AccessTokenUsageIPResponse"},"AccessTokenUsagePathResponse":{"properties":{"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"request_count":{"type":"integer","title":"Request Count"},"last_seen_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Seen At"}},"type":"object","required":["method","path","request_count","last_seen_at"],"title":"AccessTokenUsagePathResponse"},"AckResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether operation was successful","default":true},"messages_marked":{"type":"integer","title":"Messages Marked","description":"Number of messages marked as read"}},"type":"object","required":["messages_marked"],"title":"AckResponse","description":"Message acknowledgement response."},"AdminBackupCodesResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"backup_codes":{"items":{"type":"string"},"type":"array","title":"Backup Codes"}},"type":"object","required":["success","backup_codes"],"title":"AdminBackupCodesResponse","description":"Backup code regeneration response."},"AdminChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","minLength":12,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"AdminChangePasswordRequest","description":"Request to change admin password."},"AdminDashboardResponse":{"properties":{"tickets":{"additionalProperties":{"type":"integer"},"type":"object","title":"Tickets","description":"Ticket counts by status"},"telemetry":{"items":{"$ref":"#/components/schemas/TelemetryEndpointStat"},"type":"array","title":"Telemetry","description":"Top telemetry stats"},"active_users":{"type":"integer","title":"Active Users","description":"Active users in last 24h","default":0},"total_users":{"type":"integer","title":"Total Users","description":"Total registered users","default":0},"scheduled_deletions":{"type":"integer","title":"Scheduled Deletions","description":"Users with scheduled account deletion","default":0},"db_status":{"type":"string","title":"Db Status","description":"Database connection health","default":"healthy"},"system":{"anyOf":[{"$ref":"#/components/schemas/SystemMetrics"},{"type":"null"}],"description":"System health metrics"},"server_version":{"type":"string","title":"Server Version","description":"Current server version string"}},"type":"object","required":["tickets","telemetry","server_version"],"title":"AdminDashboardResponse","description":"Admin dashboard data."},"AdminLoginRequest":{"properties":{"username":{"type":"string","maxLength":100,"minLength":1,"title":"Username"},"password":{"type":"string","maxLength":200,"minLength":1,"title":"Password"}},"type":"object","required":["username","password"],"title":"AdminLoginRequest","description":"Admin login request."},"AdminLoginResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Login status (success, otp_required, otp_setup_required)"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"Session token if successful"},"admin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Id","description":"Admin ID if OTP required"},"otp_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Otp Secret","description":"OTP secret for setup"},"otp_qr_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Otp Qr Uri","description":"OTP QR URI for setup"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Instruction message"},"challenge_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Token","description":"Short-lived challenge token for OTP verification"}},"type":"object","required":["status"],"title":"AdminLoginResponse","description":"Admin login response."},"AdminOTPDisableRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"code":{"type":"string","maxLength":16,"minLength":6,"title":"Code"}},"type":"object","required":["current_password","code"],"title":"AdminOTPDisableRequest","description":"Disable admin OTP after verifying password and OTP."},"AdminOTPSetupBeginRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"}},"type":"object","required":["current_password"],"title":"AdminOTPSetupBeginRequest","description":"Begin an admin OTP setup/reset flow."},"AdminSecurityStatusResponse":{"properties":{"admin_id":{"type":"string","title":"Admin Id"},"username":{"type":"string","title":"Username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"created_at":{"type":"integer","title":"Created At"},"last_login":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Login"},"otp_required":{"type":"boolean","title":"Otp Required"},"otp_enabled":{"type":"boolean","title":"Otp Enabled"},"must_setup_otp":{"type":"boolean","title":"Must Setup Otp"},"backup_codes_remaining":{"type":"integer","title":"Backup Codes Remaining"}},"type":"object","required":["admin_id","username","email","created_at","last_login","otp_required","otp_enabled","must_setup_otp","backup_codes_remaining"],"title":"AdminSecurityStatusResponse","description":"Admin account security posture."},"AllUnreadCountsResponse":{"properties":{"unread_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Unread Counts","description":"Map of channel IDs to unread counts"}},"type":"object","required":["unread_counts"],"title":"AllUnreadCountsResponse","description":"All unread message counts response."},"AttachmentRequest":{"properties":{"filename":{"type":"string","title":"Filename","description":"File name"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"size":{"type":"integer","minimum":0.0,"title":"Size","description":"File size in bytes"},"url":{"type":"string","title":"Url","description":"File URL"},"hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash","description":"SHA-256 hash for content reporting"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Attachment metadata"}},"type":"object","required":["filename","content_type","size","url"],"title":"AttachmentRequest","description":"Attachment in message request."},"AttachmentResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Attachment ID"},"filename":{"type":"string","title":"Filename","description":"File name"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"size":{"type":"integer","title":"Size","description":"File size in bytes"},"url":{"type":"string","title":"Url","description":"File URL"},"hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash","description":"SHA-256 hash for content reporting"}},"type":"object","required":["id","filename","content_type","size","url"],"title":"AttachmentResponse","description":"Attachment response."},"AttachmentUploadResponse":{"properties":{"id":{"type":"string","title":"Id","description":"File ID"},"filename":{"type":"string","title":"Filename","description":"Original filename"},"size":{"type":"integer","title":"Size","description":"File size in bytes"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"url":{"type":"string","title":"Url","description":"Download URL"},"hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash","description":"SHA-256 hash for content reporting"},"thumbnails":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Thumbnails","description":"Generated thumbnails"}},"type":"object","required":["id","filename","size","content_type","url"],"title":"AttachmentUploadResponse","description":"Attachment upload response."},"AuditLogEntryResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Entry ID"},"server_id":{"type":"string","title":"Server Id","description":"Server ID"},"user_id":{"type":"string","title":"User Id","description":"User who performed action"},"user":{"anyOf":[{"$ref":"#/components/schemas/UserPublicResponse"},{"type":"null"}],"description":"User information"},"action":{"type":"string","title":"Action","description":"Action type"},"target_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Type","description":"Target object type"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id","description":"Target object ID"},"target_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Name","description":"Target object name"},"changes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Changes","description":"Dictionary of changes"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Reason for action"},"created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created At","description":"Creation timestamp"}},"type":"object","required":["id","server_id","user_id","action"],"title":"AuditLogEntryResponse","description":"Audit log entry response."},"AutomodConfigResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"ai":{"additionalProperties":true,"type":"object","title":"Ai"}},"type":"object","required":["enabled"],"title":"AutomodConfigResponse"},"AutomodConfigUpdateRequest":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"ai":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Ai"}},"type":"object","title":"AutomodConfigUpdateRequest"},"AutomodViolationResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Violation ID"},"user_id":{"type":"string","title":"User Id","description":"User ID who violated"},"channel_id":{"type":"string","title":"Channel Id","description":"Channel ID"},"rule_id":{"type":"string","title":"Rule Id","description":"Rule ID triggered"},"rule_type":{"type":"string","title":"Rule Type","description":"Rule type triggered"},"matched_content":{"type":"string","title":"Matched Content","description":"Content that triggered the rule"},"severity":{"type":"string","title":"Severity","description":"Violation severity"},"actions_taken":{"items":{"type":"string"},"type":"array","title":"Actions Taken","description":"Actions that were taken"},"created_at":{"type":"integer","title":"Created At","description":"Violation timestamp"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"Additional details"}},"type":"object","required":["id","user_id","channel_id","rule_id","rule_type","matched_content","severity","actions_taken","created_at"],"title":"AutomodViolationResponse","description":"Automod violation response schema."},"AvatarConfigResponse":{"properties":{"default_colors":{"items":{"type":"string"},"type":"array","title":"Default Colors","description":"The color palette for autogenerated avatars"},"max_size":{"type":"integer","title":"Max Size","description":"Maximum allowed dimension for avatars (width/height)"},"max_file_size":{"type":"integer","title":"Max File Size","description":"Maximum allowed file size in bytes"},"allowed_types":{"items":{"type":"string"},"type":"array","title":"Allowed Types","description":"List of allowed MIME types for avatars"}},"type":"object","required":["default_colors","max_size","max_file_size","allowed_types"],"title":"AvatarConfigResponse","description":"Avatar configuration details."},"AvatarUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the upload was successful"},"avatar_url":{"type":"string","title":"Avatar Url","description":"The URL of the uploaded avatar"},"width":{"type":"integer","title":"Width","description":"Image width in pixels"},"height":{"type":"integer","title":"Height","description":"Image height in pixels"},"size":{"type":"integer","title":"Size","description":"File size in bytes"},"animated":{"type":"boolean","title":"Animated","description":"Whether the image is animated (GIF/WebP)"}},"type":"object","required":["success","avatar_url","width","height","size","animated"],"title":"AvatarUploadResponse","description":"Response after uploading a user avatar."},"BadgeInfo":{"properties":{"name":{"type":"string","title":"Name","description":"Internal badge name"},"display_name":{"type":"string","title":"Display Name","description":"Display name for the badge"},"description":{"type":"string","title":"Description","description":"Description of the badge"},"icon":{"type":"string","title":"Icon","description":"Icon name or URL"},"color":{"type":"string","title":"Color","description":"Hex color code for the badge"}},"type":"object","required":["name","display_name","description","icon","color"],"title":"BadgeInfo","description":"Badge information."},"BadgesResponse":{"properties":{"badges":{"items":{"$ref":"#/components/schemas/BadgeInfo"},"type":"array","title":"Badges","description":"List of available badges with details"}},"type":"object","required":["badges"],"title":"BadgesResponse","description":"Response for available badges."},"BanCreateRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reason","description":"Reason for ban"},"delete_message_days":{"type":"integer","maximum":7.0,"minimum":0.0,"title":"Delete Message Days","description":"Number of days of messages to delete","default":0}},"type":"object","title":"BanCreateRequest","description":"Ban creation request."},"BanResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"Banned user ID"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Reason for ban"},"banned_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Banned By","description":"User who performed the ban"},"banned_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Banned At","description":"Ban timestamp"}},"type":"object","required":["user_id"],"title":"BanResponse","description":"Server ban information response."},"BannedUsernameCreate":{"properties":{"pattern":{"type":"string","maxLength":100,"minLength":1,"title":"Pattern"},"reason":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Reason"},"is_regex":{"type":"boolean","title":"Is Regex","default":false}},"type":"object","required":["pattern"],"title":"BannedUsernameCreate","description":"Create banned username pattern."},"BannedUsernameResponse":{"properties":{"id":{"type":"integer","title":"Id"},"pattern":{"type":"string","title":"Pattern"},"is_regex":{"type":"boolean","title":"Is Regex"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"title":"Created At"}},"type":"object","required":["id","pattern","is_regex","reason","created_at"],"title":"BannedUsernameResponse","description":"Banned username pattern response."},"BlockCreate":{"properties":{"user_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"User Id","description":"User ID to block"}},"additionalProperties":false,"type":"object","required":["user_id"],"title":"BlockCreate","description":"Block creation model."},"BlockHashResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether block was successful"},"hash_value":{"type":"string","title":"Hash Value","description":"Blocked hash value"},"hash_type":{"type":"string","title":"Hash Type","description":"Hash type (sha256, phash)"}},"type":"object","required":["success","hash_value","hash_type"],"title":"BlockHashResponse","description":"Response for manual hash block."},"BlockUserRequest":{"properties":{"user_id":{"type":"integer","title":"User Id","description":"User ID to block"},"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason","description":"Reason for blocking"},"duration_hours":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Hours","description":"Duration in hours (None = permanent)"}},"type":"object","required":["user_id","reason"],"title":"BlockUserRequest","description":"Block a user from uploading media."},"BlockUserResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether block was successful"},"user_id":{"type":"integer","title":"User Id","description":"User ID"}},"type":"object","required":["success","user_id"],"title":"BlockUserResponse","description":"Response for user block."},"BlockedHashResponse":{"properties":{"hash_value":{"type":"string","title":"Hash Value","description":"Hash value"},"reason":{"type":"string","title":"Reason","description":"Reason for blocking"},"blocked_at":{"type":"integer","title":"Blocked At","description":"Block timestamp"},"blocked_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Blocked By","description":"Admin ID who blocked"},"auto_blocked":{"type":"boolean","title":"Auto Blocked","description":"Whether auto-blocked","default":false},"hash_type":{"type":"string","title":"Hash Type","description":"Hash type (sha256, phash)"},"phash_threshold":{"type":"integer","title":"Phash Threshold","description":"pHash similarity threshold","default":0}},"type":"object","required":["hash_value","reason","blocked_at","hash_type"],"title":"BlockedHashResponse","description":"Blocked hash information."},"BlockedIPResponse":{"properties":{"ip_address":{"type":"string","title":"Ip Address"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"blocked_at":{"type":"integer","title":"Blocked At"},"blocked_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Blocked By"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["ip_address","reason","blocked_at","blocked_by","expires_at"],"title":"BlockedIPResponse","description":"Blocked IP information."},"BlockedUserResponse":{"properties":{"user_id":{"type":"integer","title":"User Id","description":"User ID"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username","description":"Username"},"reason":{"type":"string","title":"Reason","description":"Reason for blocking"},"blocked_at":{"type":"integer","title":"Blocked At","description":"Block timestamp"},"blocked_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Blocked By","description":"Admin ID who blocked"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Expiration timestamp"}},"type":"object","required":["user_id","reason","blocked_at"],"title":"BlockedUserResponse","description":"Blocked user information."},"Body_create_emoji_api_v1_servers__server_id__emojis_post":{"properties":{"name":{"type":"string","title":"Name","description":"Emoji name (2-32 alphanumeric characters)"},"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image","description":"Emoji image (PNG, GIF, or WebP, max 256KB)"}},"type":"object","required":["name","image"],"title":"Body_create_emoji_api_v1_servers__server_id__emojis_post"},"Body_create_sticker_api_v1_servers__server_id__stickers_post":{"properties":{"name":{"type":"string","maxLength":30,"minLength":2,"title":"Name"},"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"},"tags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags"}},"type":"object","required":["name","image"],"title":"Body_create_sticker_api_v1_servers__server_id__stickers_post"},"Body_send_sticker_usage_api_v1_stickers__sticker_id__send_post":{"properties":{"message_id":{"type":"string","title":"Message Id"}},"type":"object","required":["message_id"],"title":"Body_send_sticker_usage_api_v1_stickers__sticker_id__send_post"},"Body_upload_attachment_api_v1_channels__channel_id__attachments_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_attachment_api_v1_channels__channel_id__attachments_post"},"Body_upload_avatar_api_v1_users__me_avatar_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_avatar_api_v1_users__me_avatar_post"},"Body_upload_chunk_api_v1_media_upload_chunk__session_id__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_chunk_api_v1_media_upload_chunk__session_id__post"},"Body_upload_my_avatar_api_v1_avatars_users__me_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_my_avatar_api_v1_avatars_users__me_post"},"Body_upload_server_icon_api_v1_avatars_servers__server_id__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_server_icon_api_v1_avatars_servers__server_id__post"},"Body_upload_server_icon_api_v1_servers__server_id__icon_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_server_icon_api_v1_servers__server_id__icon_post"},"ChannelCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Channel name"},"channel_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Type","description":"Channel type: text, voice, category","default":"text"},"topic":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Topic","description":"Channel topic"},"category_id":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Category Id","description":"Parent category ID"},"nsfw":{"type":"boolean","title":"Nsfw","description":"NSFW flag","default":false},"slowmode_seconds":{"type":"integer","maximum":21600.0,"minimum":0.0,"title":"Slowmode Seconds","description":"Slowmode delay in seconds","default":0},"read_receipts_enabled":{"type":"boolean","title":"Read Receipts Enabled","description":"Whether to track read receipts in this channel","default":true}},"type":"object","required":["name"],"title":"ChannelCreateRequest","description":"Channel creation request."},"ChannelInviteCreateRequest":{"properties":{"max_age":{"type":"integer","minimum":0.0,"title":"Max Age","description":"Duration of invite in seconds (0 = never)","default":86400},"max_uses":{"type":"integer","minimum":0.0,"title":"Max Uses","description":"Max number of uses (0 = unlimited)","default":0},"temporary":{"type":"boolean","title":"Temporary","description":"Whether this invite grants temporary membership","default":false}},"type":"object","title":"ChannelInviteCreateRequest","description":"Channel invite creation request."},"ChannelInviteResponse":{"properties":{"code":{"type":"string","title":"Code","description":"Invite code"},"channel_id":{"type":"string","title":"Channel Id","description":"Channel ID"},"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id","description":"Server ID"},"max_age":{"type":"integer","title":"Max Age","description":"Max age in seconds","default":86400},"max_uses":{"type":"integer","title":"Max Uses","description":"Max uses","default":0},"temporary":{"type":"boolean","title":"Temporary","description":"Temporary membership","default":false},"uses":{"type":"integer","title":"Uses","description":"Number of uses","default":0},"created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created At","description":"Creation timestamp"}},"type":"object","required":["code","channel_id"],"title":"ChannelInviteResponse","description":"Channel invite response."},"ChannelResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Channel ID"},"server_id":{"type":"string","title":"Server Id","description":"Server ID"},"name":{"type":"string","title":"Name","description":"Channel name"},"channel_type":{"type":"string","title":"Channel Type","description":"Channel type: text, voice, category"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic","description":"Channel topic"},"position":{"type":"integer","title":"Position","description":"Channel position","default":0},"category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id","description":"Parent category ID"},"nsfw":{"type":"boolean","title":"Nsfw","description":"NSFW flag","default":false},"slowmode_seconds":{"type":"integer","title":"Slowmode Seconds","description":"Slowmode delay in seconds","default":0},"read_receipts_enabled":{"type":"boolean","title":"Read Receipts Enabled","description":"Whether read receipts are enabled","default":true},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"},"recipient_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Id","description":"Recipient user ID (DMs only)"},"recipient":{"anyOf":[{"$ref":"#/components/schemas/UserPublicResponse"},{"type":"null"}],"description":"Recipient details (DMs only)"}},"type":"object","required":["id","server_id","name","channel_type","created_at"],"title":"ChannelResponse","description":"Channel information response."},"ChannelUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name","description":"Channel name"},"topic":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Topic","description":"Channel topic"},"position":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Position","description":"Channel position"},"nsfw":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Nsfw","description":"NSFW flag"},"slowmode_seconds":{"anyOf":[{"type":"integer","maximum":21600.0,"minimum":0.0},{"type":"null"}],"title":"Slowmode Seconds","description":"Slowmode delay"},"read_receipts_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read Receipts Enabled","description":"Whether to track read receipts"}},"type":"object","title":"ChannelUpdateRequest","description":"Channel update request."},"ChunkUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether chunk was successfully uploaded"},"chunk_index":{"type":"integer","title":"Chunk Index","description":"Index of the uploaded chunk"},"uploaded_chunks":{"type":"integer","title":"Uploaded Chunks","description":"Number of chunks uploaded so far"},"total_chunks":{"type":"integer","title":"Total Chunks","description":"Total number of chunks in session"},"progress_percent":{"type":"number","title":"Progress Percent","description":"Overall upload progress percentage"},"is_complete":{"type":"boolean","title":"Is Complete","description":"Whether all chunks have been uploaded"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message if upload failed"}},"type":"object","required":["success","chunk_index","uploaded_chunks","total_chunks","progress_percent","is_complete"],"title":"ChunkUploadResponse","description":"Response for chunk upload."},"ChunkedUploadSessionRequest":{"properties":{"filename":{"type":"string","maxLength":255,"minLength":1,"title":"Filename","description":"Original filename"},"content_type":{"type":"string","maxLength":100,"minLength":1,"title":"Content Type","description":"MIME type of the file"},"total_size":{"type":"integer","maximum":1073741824.0,"exclusiveMinimum":0.0,"title":"Total Size","description":"Total file size in bytes (max 1GB)"}},"type":"object","required":["filename","content_type","total_size"],"title":"ChunkedUploadSessionRequest","description":"Create a chunked upload session."},"ChunkedUploadSessionResponse":{"properties":{"session_id":{"type":"string","title":"Session Id","description":"Unique upload session ID"},"chunk_size":{"type":"integer","title":"Chunk Size","description":"Expected chunk size in bytes"},"total_chunks":{"type":"integer","title":"Total Chunks","description":"Total number of chunks expected"},"expires_at":{"type":"integer","title":"Expires At","description":"Session expiration timestamp (Unix)"}},"type":"object","required":["session_id","chunk_size","total_chunks","expires_at"],"title":"ChunkedUploadSessionResponse","description":"Response for chunked upload session creation."},"CompleteUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the upload was completed successfully"},"size":{"type":"integer","title":"Size","description":"Total size of the assembled file"},"message":{"type":"string","title":"Message","description":"Status message"}},"type":"object","required":["success","size","message"],"title":"CompleteUploadResponse","description":"Response for completed upload session."},"CompressionStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether compression is enabled globally"},"image_compression":{"type":"boolean","title":"Image Compression","description":"Whether image compression is enabled"},"video_compression":{"type":"boolean","title":"Video Compression","description":"Whether video compression is enabled"}},"type":"object","required":["enabled","image_compression","video_compression"],"title":"CompressionStatusResponse","description":"Compression system status."},"DMChannelCreateRequest":{"properties":{"recipient_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Recipient Id","description":"Recipient user ID"}},"type":"object","required":["recipient_id"],"title":"DMChannelCreateRequest","description":"DM channel creation request."},"DMChannelResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Channel ID"},"channel_type":{"type":"string","title":"Channel Type","description":"Channel type (dm)","default":"dm"},"recipient_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Id","description":"Recipient user ID"},"recipient":{"anyOf":[{"$ref":"#/components/schemas/RecipientResponse"},{"type":"null"}],"description":"Recipient details"},"last_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Id","description":"Last message ID in channel"}},"type":"object","required":["id"],"title":"DMChannelResponse","description":"DM channel information response."},"DetailedRelationshipInfo":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID"},"username":{"type":"string","title":"Username","description":"Username"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"User avatar URL"},"status":{"type":"string","title":"Status","description":"Relationship status (friend, pending_incoming, pending_outgoing, blocked)"},"presence":{"anyOf":[{"$ref":"#/components/schemas/PresenceInfo"},{"type":"null"}],"description":"User presence status"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Optional message (for pending requests)"},"created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created At","description":"Creation timestamp"}},"type":"object","required":["user_id","username","status"],"title":"DetailedRelationshipInfo","description":"Detailed relationship info including user details."},"EmojiCountsResponse":{"properties":{"static":{"type":"integer","title":"Static","description":"Number of static emojis"},"animated":{"type":"integer","title":"Animated","description":"Number of animated emojis"},"max_static":{"type":"integer","title":"Max Static","description":"Maximum static emojis allowed"},"max_animated":{"type":"integer","title":"Max Animated","description":"Maximum animated emojis allowed"}},"type":"object","required":["static","animated","max_static","max_animated"],"title":"EmojiCountsResponse","description":"Emoji counts response model."},"EmojiResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Emoji ID"},"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id","description":"Server ID"},"name":{"type":"string","title":"Name","description":"Emoji name"},"animated":{"type":"boolean","title":"Animated","description":"Whether emoji is animated","default":false},"url":{"type":"string","title":"Url","description":"Emoji image URL","default":""},"available":{"type":"boolean","title":"Available","description":"Whether emoji is available for use","default":true},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"User ID who created the emoji"},"uploader_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Username","description":"Username of the uploader"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"}},"type":"object","required":["id","server_id","name","created_by","created_at"],"title":"EmojiResponse","description":"Custom emoji response model."},"EmojiUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"New emoji name"}},"type":"object","title":"EmojiUpdateRequest","description":"Emoji update request model."},"ErrorDetail":{"properties":{"code":{"type":"integer","title":"Code","description":"Error code"},"message":{"type":"string","title":"Message","description":"Error message"}},"type":"object","required":["code","message"],"title":"ErrorDetail","description":"Error detail model."},"ErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"type":"object","required":["error"],"title":"ErrorResponse","description":"Standard error response."},"FeedbackCreate":{"properties":{"content":{"type":"string","maxLength":2000,"minLength":10,"title":"Content","description":"Feedback content"},"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Category","description":"Feedback category"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating","description":"Feedback rating (1-5)"}},"type":"object","required":["content"],"title":"FeedbackCreate","description":"Feedback submission model."},"FeedbackResponse":{"properties":{"id":{"type":"integer","title":"Id","description":"Feedback ID"},"message":{"type":"string","title":"Message","description":"Success message"}},"type":"object","required":["id","message"],"title":"FeedbackResponse","description":"Feedback response model."},"FeedbackStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether feedback system is enabled"},"submissions_this_hour":{"type":"integer","title":"Submissions This Hour","description":"Submissions in the last hour"},"submissions_today":{"type":"integer","title":"Submissions Today","description":"Submissions in the last 24 hours"},"max_per_hour":{"type":"integer","title":"Max Per Hour","description":"Maximum submissions allowed per hour"},"max_per_day":{"type":"integer","title":"Max Per Day","description":"Maximum submissions allowed per day"},"can_submit":{"type":"boolean","title":"Can Submit","description":"Whether user can currently submit feedback"}},"type":"object","required":["enabled","submissions_this_hour","submissions_today","max_per_hour","max_per_day","can_submit"],"title":"FeedbackStatusResponse","description":"Feedback status for current user."},"ForceLogoutRequest":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID to logout"}},"type":"object","required":["user_id"],"title":"ForceLogoutRequest","description":"Request to force logout a user."},"ForceUsernameChangeRequest":{"properties":{"ban_current":{"type":"boolean","title":"Ban Current","description":"Whether to add current username to blacklist","default":false},"reason":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Reason","default":"Forced change by admin"}},"type":"object","title":"ForceUsernameChangeRequest","description":"Request to force a username change."},"FriendRequestCreate":{"properties":{"user_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"User Id","description":"Target user ID"},"message":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Message","description":"Optional message"}},"additionalProperties":false,"type":"object","required":["user_id"],"title":"FriendRequestCreate","description":"Friend request creation model."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HashReportCountsResponse":{"properties":{"pending":{"type":"integer","title":"Pending","description":"Pending reports","default":0},"blocked":{"type":"integer","title":"Blocked","description":"Blocked reports","default":0},"cleared":{"type":"integer","title":"Cleared","description":"Cleared reports","default":0},"total":{"type":"integer","title":"Total","description":"Total reports","default":0}},"type":"object","title":"HashReportCountsResponse","description":"Hash report counts by status."},"HashReportRequest":{"properties":{"hash_value":{"type":"string","maxLength":128,"minLength":16,"title":"Hash Value","description":"SHA-256 or perceptual hash of the file"},"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason","description":"Reason for report"},"details":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Details","description":"Additional details"},"phash_value":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Phash Value","description":"Perceptual hash (for images)"},"uploader_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uploader Id","description":"User ID of the uploader"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id","description":"Message ID containing the attachment"},"attachment_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Attachment Url","description":"URL of the attachment"},"block_uploader":{"type":"boolean","title":"Block Uploader","description":"Request to block the uploader","default":false}},"type":"object","required":["hash_value","reason"],"title":"HashReportRequest","description":"Report a file hash for content moderation."},"HashReportReviewRequest":{"properties":{"action":{"type":"string","pattern":"^(block|clear|dismiss)$","title":"Action"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["action"],"title":"HashReportReviewRequest","description":"Review a hash report."},"HashReportReviewResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether review was successful"},"action":{"type":"string","title":"Action","description":"Action taken (block, clear, dismiss)"}},"type":"object","required":["success","action"],"title":"HashReportReviewResponse","description":"Response for hash report review."},"HashStatusResponse":{"properties":{"hash_value":{"type":"string","title":"Hash Value","description":"The hash value checked"},"is_blocked":{"type":"boolean","title":"Is Blocked","description":"Whether the hash is blocked"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Reason for blocking if blocked"}},"type":"object","required":["hash_value","is_blocked"],"title":"HashStatusResponse","description":"Status of a file hash."},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"version":{"type":"string","title":"Version"}},"type":"object","required":["status","version"],"title":"HealthResponse","description":"Health check response."},"ICEServerConfig":{"properties":{"urls":{"items":{"type":"string"},"type":"array","title":"Urls","description":"List of STUN/TURN server URLs"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username","description":"Username for TURN server authentication"},"credential":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credential","description":"Credential for TURN server authentication"}},"type":"object","required":["urls"],"title":"ICEServerConfig","description":"Configuration for a single ICE server."},"ICEServersResponse":{"properties":{"ice_servers":{"items":{"$ref":"#/components/schemas/ICEServerConfig"},"type":"array","title":"Ice Servers","description":"List of ICE server configurations"}},"type":"object","required":["ice_servers"],"title":"ICEServersResponse","description":"Response for ICE server configuration."},"IPBlockRequest":{"properties":{"ip_address":{"type":"string","title":"Ip Address","description":"IP address to block"},"reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason","description":"Reason for blocking"},"duration_hours":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Hours","description":"Duration in hours"}},"type":"object","required":["ip_address"],"title":"IPBlockRequest","description":"Request to block an IP address."},"IconUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the upload was successful"},"icon_url":{"type":"string","title":"Icon Url","description":"The URL of the uploaded icon"},"width":{"type":"integer","title":"Width","description":"Image width in pixels"},"height":{"type":"integer","title":"Height","description":"Image height in pixels"},"size":{"type":"integer","title":"Size","description":"File size in bytes"},"animated":{"type":"boolean","title":"Animated","description":"Whether the image is animated (GIF/WebP)"}},"type":"object","required":["success","icon_url","width","height","size","animated"],"title":"IconUploadResponse","description":"Response after uploading a server icon."},"InternalNoteCreate":{"properties":{"content":{"type":"string","maxLength":2000,"minLength":1,"title":"Content"}},"type":"object","required":["content"],"title":"InternalNoteCreate","description":"Create internal note."},"InviteInfoResponse":{"properties":{"code":{"type":"string","title":"Code","description":"Invite code"},"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id","description":"Server ID"},"server_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Name","description":"Server name"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id","description":"Channel ID"},"inviter_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inviter Id","description":"Inviter user ID"},"uses":{"type":"integer","title":"Uses","description":"Number of uses","default":0},"max_uses":{"type":"integer","title":"Max Uses","description":"Maximum uses","default":0},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Expiration timestamp"}},"type":"object","required":["code"],"title":"InviteInfoResponse","description":"Invite information response."},"InviteJoinResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether join was successful","default":true},"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id","description":"Server ID joined"}},"type":"object","title":"InviteJoinResponse","description":"Invite join response."},"InviteResponse":{"properties":{"code":{"type":"string","title":"Code","description":"Invite code"},"server_id":{"type":"string","title":"Server Id","description":"Server ID"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id","description":"Channel ID"},"inviter_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inviter Id","description":"Inviter user ID"},"uses":{"type":"integer","title":"Uses","description":"Number of uses","default":0},"max_uses":{"type":"integer","title":"Max Uses","description":"Maximum uses (0 = unlimited)","default":0},"max_age":{"type":"integer","title":"Max Age","description":"Max age in seconds (0 = never expires)","default":0},"temporary":{"type":"boolean","title":"Temporary","description":"Temporary membership","default":false},"created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created At","description":"Creation timestamp"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Expiration timestamp"}},"type":"object","required":["code","server_id"],"title":"InviteResponse","description":"Server invite response."},"LogFileInfo":{"properties":{"filename":{"type":"string","title":"Filename"},"size":{"type":"integer","title":"Size"},"modified":{"type":"integer","title":"Modified"},"is_zipped":{"type":"boolean","title":"Is Zipped"}},"type":"object","required":["filename","size","modified","is_zipped"],"title":"LogFileInfo","description":"Metadata for a log file."},"LogLine":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"level":{"type":"string","title":"Level"},"message":{"type":"string","title":"Message"},"raw":{"type":"string","title":"Raw"}},"type":"object","required":["timestamp","level","message","raw"],"title":"LogLine","description":"A single log entry."},"LogViewResponse":{"properties":{"filename":{"type":"string","title":"Filename"},"total_lines":{"type":"integer","title":"Total Lines"},"lines":{"items":{"$ref":"#/components/schemas/LogLine"},"type":"array","title":"Lines"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["filename","total_lines","lines","limit","offset"],"title":"LogViewResponse","description":"Log file content with pagination."},"LoginRequest":{"properties":{"username":{"type":"string","title":"Username","description":"Username or email"},"password":{"type":"string","title":"Password","description":"Password"}},"type":"object","required":["username","password"],"title":"LoginRequest","description":"User login request."},"LoginResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Login status: success, two_factor_required"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"Session token (if success)"},"user":{"anyOf":[{"$ref":"#/components/schemas/UserResponse"},{"type":"null"}],"description":"User info (if success)"},"challenge_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Token","description":"2FA challenge token"},"methods":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Methods","description":"Available 2FA methods"},"expires_in":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In","description":"Challenge expiration seconds"}},"type":"object","required":["status"],"title":"LoginResponse","description":"Login response."},"ManualBlockHashRequest":{"properties":{"hash_value":{"type":"string","maxLength":128,"minLength":64,"title":"Hash Value"},"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason"}},"type":"object","required":["hash_value","reason"],"title":"ManualBlockHashRequest","description":"Manually block a hash."},"MemberResponse":{"properties":{"member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Id","description":"Member record ID"},"user_id":{"type":"string","title":"User Id","description":"User ID"},"username":{"type":"string","title":"Username","description":"Username"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname","description":"Server-specific nickname"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"User avatar URL"},"joined_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Joined At","description":"Join timestamp"},"roles":{"items":{"type":"string"},"type":"array","title":"Roles","description":"List of role IDs"},"presence":{"$ref":"#/components/schemas/src__api__schemas__servers__PresenceResponse"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges","description":"User badges"},"timeout_until":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout Until","description":"Timestamp until user is timed out"},"timeout_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timeout Reason","description":"Reason for timeout"}},"type":"object","required":["user_id","username"],"title":"MemberResponse","description":"Server member information response."},"MessageCreateRequest":{"properties":{"content":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Content","description":"Message content"},"reply_to_id":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Reply To Id","description":"ID of message to reply to"},"attachments":{"anyOf":[{"items":{"$ref":"#/components/schemas/AttachmentRequest"},"type":"array"},{"type":"null"}],"title":"Attachments","description":"Message attachments"},"embeds":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Embeds","description":"Rich embeds"},"poll":{"anyOf":[{"$ref":"#/components/schemas/PollInlineCreateRequest"},{"type":"null"}],"description":"Poll to attach to this message"}},"type":"object","title":"MessageCreateRequest","description":"Message creation request."},"MessageReportRequest":{"properties":{"message_id":{"type":"string","title":"Message Id","description":"ID of the message to report"},"channel_id":{"type":"string","title":"Channel Id","description":"Channel containing the message"},"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason","description":"Reason for report"},"category":{"type":"string","title":"Category","description":"Report category","default":"other"},"details":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Details","description":"Additional details"},"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id","description":"Server ID if applicable"}},"type":"object","required":["message_id","channel_id","reason"],"title":"MessageReportRequest","description":"Report a message."},"MessageReportResponse":{"properties":{"id":{"type":"string","title":"Id"},"message_id":{"type":"string","title":"Message Id"},"channel_id":{"type":"string","title":"Channel Id"},"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id"},"reporter_id":{"type":"string","title":"Reporter Id"},"reported_user_id":{"type":"string","title":"Reported User Id"},"reason":{"type":"string","title":"Reason"},"category":{"type":"string","title":"Category"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details"},"message_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Content"},"status":{"type":"string","title":"Status"},"reported_at":{"type":"integer","title":"Reported At"},"reviewed_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviewed At"},"reviewed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"},"action_taken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Taken"}},"type":"object","required":["id","message_id","channel_id","reporter_id","reported_user_id","reason","category","status","reported_at"],"title":"MessageReportResponse","description":"Message report row for admin review."},"MessageResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Message ID"},"channel_id":{"type":"string","title":"Channel Id","description":"Channel ID"},"author_id":{"type":"string","title":"Author Id","description":"Author user ID"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"Message content"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"},"edited_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Edited At","description":"Edit timestamp"},"reply_to_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To Id","description":"Reply target message ID"},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentResponse"},"type":"array","title":"Attachments","description":"Attachments"},"embeds":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Embeds","description":"Rich embeds"},"pinned":{"type":"boolean","title":"Pinned","description":"Pinned status","default":false},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Status for the current user (sent, delivered, read)"},"delivery_count":{"type":"integer","title":"Delivery Count","description":"Number of users who received the message","default":0},"read_count":{"type":"integer","title":"Read Count","description":"Number of users who read the message","default":0},"read":{"type":"boolean","title":"Read","description":"Whether the current user has read this message","default":false},"read_by":{"items":{"$ref":"#/components/schemas/ReaderInfo"},"type":"array","title":"Read By","description":"List of users who have read the message"},"author_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Username","description":"Author's username"},"author_avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Avatar Url","description":"Author's avatar URL"},"author_badges":{"items":{"type":"string"},"type":"array","title":"Author Badges","description":"Author's profile badges"},"reactions":{"items":{"$ref":"#/components/schemas/ReactionResponse"},"type":"array","title":"Reactions","description":"Message reactions"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional message metadata"},"poll":{"anyOf":[{"$ref":"#/components/schemas/PollResponse"},{"type":"null"}],"description":"Attached poll details"},"poll_results":{"anyOf":[{"$ref":"#/components/schemas/PollResultsResponse"},{"type":"null"}],"description":"Current poll results and user voting status"}},"type":"object","required":["id","channel_id","author_id","created_at"],"title":"MessageResponse","description":"Message response."},"MessageSearchPageResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/MessageResponse"},"type":"array","title":"Results"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["results"],"title":"MessageSearchPageResponse","description":"Paginated message search results."},"MessageUpdateRequest":{"properties":{"content":{"type":"string","maxLength":4000,"title":"Content","description":"New message content"}},"type":"object","required":["content"],"title":"MessageUpdateRequest","description":"Message update request."},"MessagingSettingsResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID"},"read_receipts_enabled":{"type":"boolean","title":"Read Receipts Enabled","description":"Whether to send read receipts","default":true},"typing_indicators_enabled":{"type":"boolean","title":"Typing Indicators Enabled","description":"Whether to show typing indicators","default":true},"compact_messages_enabled":{"type":"boolean","title":"Compact Messages Enabled","description":"Whether to group consecutive messages from the same person","default":true},"allow_dms_from":{"type":"string","title":"Allow Dms From","description":"Who can send DMs (everyone, friends, none)","default":"everyone"},"auto_create_dms":{"type":"boolean","title":"Auto Create Dms","description":"Whether to automatically create DM conversations","default":true},"max_message_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Message Length","description":"Maximum message length (None = global default)"},"max_attachment_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Attachment Size","description":"Maximum attachment size (None = global default)"},"max_attachments_per_message":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Attachments Per Message","description":"Maximum attachments per message (None = global default)"}},"type":"object","required":["user_id"],"title":"MessagingSettingsResponse","description":"User messaging settings response."},"MessagingSettingsUpdateRequest":{"properties":{"read_receipts_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read Receipts Enabled","description":"Whether to send read receipts"},"typing_indicators_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Typing Indicators Enabled","description":"Whether to show typing indicators"},"compact_messages_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Compact Messages Enabled","description":"Whether to group consecutive messages from the same person"},"allow_dms_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Allow Dms From","description":"Who can send DMs (everyone, friends, none)"},"auto_create_dms":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Create Dms","description":"Whether to automatically create DM conversations"},"max_message_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Message Length","description":"Maximum message length"},"max_attachment_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Attachment Size","description":"Maximum attachment size"},"max_attachments_per_message":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Attachments Per Message","description":"Maximum attachments per message"}},"type":"object","title":"MessagingSettingsUpdateRequest","description":"User messaging settings update request."},"ModerationReportCountsResponse":{"properties":{"pending":{"type":"integer","title":"Pending","description":"Pending reports","default":0},"reviewed":{"type":"integer","title":"Reviewed","description":"Reviewed reports","default":0},"actioned":{"type":"integer","title":"Actioned","description":"Actioned reports","default":0},"dismissed":{"type":"integer","title":"Dismissed","description":"Dismissed reports","default":0},"total":{"type":"integer","title":"Total","description":"Total reports","default":0}},"type":"object","title":"ModerationReportCountsResponse","description":"Counts for message or user moderation reports."},"ModerationReportReviewRequest":{"properties":{"action":{"type":"string","pattern":"^(action|dismiss|review)$","title":"Action"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["action"],"title":"ModerationReportReviewRequest","description":"Review a message or user report."},"ModerationReportReviewResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the review succeeded"},"action":{"type":"string","title":"Action","description":"Action that was recorded"}},"type":"object","required":["success","action"],"title":"ModerationReportReviewResponse","description":"Review result for a message or user report."},"NoteResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Note ID"},"ticket_id":{"type":"string","title":"Ticket Id","description":"Ticket ID"},"admin_id":{"type":"string","title":"Admin Id","description":"Admin ID who created the note"},"admin_username":{"type":"string","title":"Admin Username","description":"Admin username"},"content":{"type":"string","title":"Content","description":"Note content"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"}},"type":"object","required":["id","ticket_id","admin_id","admin_username","content","created_at"],"title":"NoteResponse","description":"Admin note response."},"NotesChannelResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Channel ID"},"channel_type":{"type":"string","title":"Channel Type","description":"Channel type (notes)","default":"notes"},"name":{"type":"string","title":"Name","description":"Channel name","default":"Personal Notes"},"last_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Id","description":"Last message ID"},"last_message_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Message At","description":"Last message timestamp"}},"type":"object","required":["id"],"title":"NotesChannelResponse","description":"Personal notes channel response."},"NotificationInfo":{"properties":{"id":{"type":"string","title":"Id","description":"Notification ID"},"type":{"type":"string","title":"Type","description":"Notification type"},"title":{"type":"string","title":"Title","description":"Notification title"},"content":{"type":"string","title":"Content","description":"Notification content"},"content_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Preview","description":"Short preview of content"},"read":{"type":"boolean","title":"Read","description":"Whether notification has been read","default":false},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp (Unix)"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link","description":"Optional link associated with notification"},"sender_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender Id","description":"ID of user who triggered notification"}},"type":"object","required":["id","type","title","content","created_at"],"title":"NotificationInfo","description":"Notification information."},"NotificationsResponse":{"properties":{"notifications":{"items":{"$ref":"#/components/schemas/NotificationInfo"},"type":"array","title":"Notifications","description":"List of notifications"},"unread_count":{"type":"integer","title":"Unread Count","description":"Number of unread notifications"}},"type":"object","required":["notifications","unread_count"],"title":"NotificationsResponse","description":"Response for user notifications."},"OAuthCallbackRequest":{"properties":{"code":{"type":"string","title":"Code","description":"OAuth authorization code"},"state":{"type":"string","title":"State","description":"CSRF state token"},"redirect_uri":{"type":"string","title":"Redirect Uri","description":"OAuth redirect URI"},"code_verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Verifier","description":"PKCE code verifier (required if PKCE was used)"}},"type":"object","required":["code","state","redirect_uri"],"title":"OAuthCallbackRequest","description":"OAuth callback completion request."},"OAuthLoginResponse":{"properties":{"url":{"type":"string","title":"Url","description":"OAuth authorization URL"},"state":{"type":"string","title":"State","description":"CSRF state token"},"code_verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Verifier","description":"PKCE code verifier (client must store and return in callback)"}},"type":"object","required":["url","state"],"title":"OAuthLoginResponse","description":"OAuth login initiation response."},"OTPVerifyRequest":{"properties":{"admin_id":{"type":"string","title":"Admin Id","description":"Admin ID"},"code":{"type":"string","maxLength":8,"minLength":6,"title":"Code","description":"OTP code"},"is_setup":{"type":"boolean","title":"Is Setup","description":"Whether this is for initial setup","default":false},"challenge_token":{"type":"string","maxLength":200,"minLength":10,"title":"Challenge Token","description":"Challenge token from login step"}},"type":"object","required":["admin_id","code","challenge_token"],"title":"OTPVerifyRequest","description":"OTP verification request."},"PasswordRequirementsResponse":{"properties":{"min_length":{"type":"integer","title":"Min Length","description":"Minimum password length"},"max_length":{"type":"integer","title":"Max Length","description":"Maximum password length"},"require_uppercase":{"type":"boolean","title":"Require Uppercase","description":"Whether an uppercase letter is required"},"require_lowercase":{"type":"boolean","title":"Require Lowercase","description":"Whether a lowercase letter is required"},"require_digit":{"type":"boolean","title":"Require Digit","description":"Whether a digit is required"},"require_special":{"type":"boolean","title":"Require Special","description":"Whether a special character is required"},"age_gate_enabled":{"type":"boolean","title":"Age Gate Enabled","description":"Whether age gate is enabled","default":false},"age_verification_type":{"type":"string","title":"Age Verification Type","description":"Type of age verification: boolean or dob","default":"boolean"},"minimum_age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minimum Age","description":"Minimum age required if age gate is enabled"},"docs_enabled":{"type":"boolean","title":"Docs Enabled","description":"Whether server-side documentation is enabled","default":false}},"type":"object","required":["min_length","max_length","require_uppercase","require_lowercase","require_digit","require_special"],"title":"PasswordRequirementsResponse","description":"Password requirements policy."},"PasswordResetConfirm":{"properties":{"token":{"type":"string","title":"Token","description":"Reset token from email"},"new_password":{"type":"string","title":"New Password","description":"New password"}},"type":"object","required":["token","new_password"],"title":"PasswordResetConfirm","description":"Request to reset password with token."},"PasswordResetRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"Account email address"}},"type":"object","required":["email"],"title":"PasswordResetRequest","description":"Request to initiate password reset."},"PollCreateRequest":{"properties":{"question":{"type":"string","maxLength":300,"minLength":1,"title":"Question","description":"Poll question"},"options":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":2,"title":"Options","description":"Poll options"},"duration_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":1.0},{"type":"null"}],"title":"Duration Hours","description":"Poll duration in hours"},"allow_multiple_choice":{"type":"boolean","title":"Allow Multiple Choice","description":"Whether multiple options can be selected","default":false},"results_visibility":{"type":"string","title":"Results Visibility","description":"When results are visible (always, after_vote, after_end)","default":"always"},"message_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Message Id","description":"Message ID to attach poll to"}},"type":"object","required":["question","options","message_id"],"title":"PollCreateRequest","description":"Poll creation request."},"PollInlineCreateRequest":{"properties":{"question":{"type":"string","maxLength":300,"minLength":1,"title":"Question","description":"Poll question"},"options":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":2,"title":"Options","description":"Poll options"},"duration_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":1.0},{"type":"null"}],"title":"Duration Hours","description":"Poll duration in hours"},"allow_multiple_choice":{"type":"boolean","title":"Allow Multiple Choice","description":"Whether multiple options can be selected","default":false},"results_visibility":{"type":"string","title":"Results Visibility","description":"When results are visible (always, after_vote, after_end)","default":"always"}},"type":"object","required":["question","options"],"title":"PollInlineCreateRequest","description":"Poll data embedded in a message creation request."},"PollOptionResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Option ID"},"poll_id":{"type":"string","title":"Poll Id","description":"Poll ID"},"text":{"type":"string","title":"Text","description":"Option text"},"position":{"type":"integer","title":"Position","description":"Option position"},"vote_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vote Count","description":"Vote count"}},"type":"object","required":["id","poll_id","text","position"],"title":"PollOptionResponse","description":"Poll option response."},"PollResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Poll ID"},"message_id":{"type":"string","title":"Message Id","description":"Message ID"},"question":{"type":"string","title":"Question","description":"Poll question"},"created_by":{"type":"string","title":"Created By","description":"Creator user ID"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"},"ends_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ends At","description":"End timestamp"},"ended_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ended At","description":"Ended timestamp"},"allow_multiple_choice":{"type":"boolean","title":"Allow Multiple Choice","description":"Whether multiple options can be selected","default":false},"results_visibility":{"type":"string","title":"Results Visibility","description":"When results are visible (always, after_vote, after_end)","default":"always"},"options":{"items":{"$ref":"#/components/schemas/PollOptionResponse"},"type":"array","title":"Options","description":"Poll options"},"total_votes":{"type":"integer","title":"Total Votes","description":"Total votes","default":0},"is_ended":{"type":"boolean","title":"Is Ended","description":"Whether poll has ended","default":false}},"type":"object","required":["id","message_id","question","created_by","created_at"],"title":"PollResponse","description":"Poll response."},"PollResultsResponse":{"properties":{"poll":{"$ref":"#/components/schemas/PollResponse","description":"Poll info"},"options":{"items":{"$ref":"#/components/schemas/PollOptionResponse"},"type":"array","title":"Options","description":"Options with counts"},"total_votes":{"type":"integer","title":"Total Votes","description":"Total votes","default":0},"user_voted":{"type":"boolean","title":"User Voted","description":"Whether user voted","default":false},"user_votes":{"items":{"type":"string"},"type":"array","title":"User Votes","description":"Option IDs voted by user"}},"type":"object","required":["poll"],"title":"PollResultsResponse","description":"Poll results response."},"PollVoteRequest":{"properties":{"option_ids":{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array","minItems":1,"title":"Option Ids","description":"Selected option IDs"}},"type":"object","required":["option_ids"],"title":"PollVoteRequest","description":"Poll vote request."},"PresenceInfo":{"properties":{"status":{"type":"string","title":"Status","description":"User online status"}},"type":"object","required":["status"],"title":"PresenceInfo","description":"Presence information in relationship response."},"PresenceUpdate":{"properties":{"status":{"type":"string","title":"Status","description":"Status: online, idle, dnd, invisible"},"custom_status":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Custom Status","description":"Custom status text"},"custom_emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Emoji","description":"Custom status emoji"}},"type":"object","required":["status"],"title":"PresenceUpdate","description":"Presence update request."},"PublicFeaturesResponse":{"properties":{"badges":{"items":{"$ref":"#/components/schemas/BadgeInfo"},"type":"array","title":"Badges","description":"List of badges with details"},"tier":{"type":"string","title":"Tier","description":"Current user tier"},"tier_limits":{"$ref":"#/components/schemas/TierLimitsResponse","description":"Rate limit values for the tier"}},"type":"object","required":["badges","tier","tier_limits"],"title":"PublicFeaturesResponse","description":"Public response for user's own features."},"ReactionResponse":{"properties":{"emoji":{"type":"string","title":"Emoji","description":"Emoji identifier"},"count":{"type":"integer","title":"Count","description":"Number of reactions"},"me":{"type":"boolean","title":"Me","description":"Whether current user reacted","default":false},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Custom emoji URL"},"is_custom":{"type":"boolean","title":"Is Custom","description":"Whether emoji is custom","default":false},"custom_emoji_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Emoji Id","description":"Custom emoji ID"}},"type":"object","required":["emoji","count"],"title":"ReactionResponse","description":"Reaction response model."},"ReactionUserResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID"},"reacted_at":{"type":"integer","title":"Reacted At","description":"Reaction timestamp"}},"type":"object","required":["user_id","reacted_at"],"title":"ReactionUserResponse","description":"User who reacted response model."},"ReaderInfo":{"properties":{"id":{"type":"string","title":"Id","description":"User ID"},"username":{"type":"string","title":"Username","description":"Username"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Avatar URL"}},"type":"object","required":["id","username"],"title":"ReaderInfo","description":"Information about a user who read a message."},"RecipientResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Recipient user ID"},"username":{"type":"string","title":"Username","description":"Recipient username"}},"type":"object","required":["id","username"],"title":"RecipientResponse","description":"Recipient information in a DM channel."},"RegisterRequest":{"properties":{"username":{"type":"string","maxLength":32,"minLength":3,"title":"Username","description":"Username"},"email":{"type":"string","format":"email","title":"Email","description":"Email address"},"password":{"type":"string","title":"Password","description":"Password"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age","description":"User age (required if age gate enabled in boolean mode)"},"age_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Age Verified","description":"Simple age verification check (alternative to age field)"},"dob":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dob","description":"User date of birth YYYY-MM-DD (required if age gate enabled in dob mode)"}},"type":"object","required":["username","email","password"],"title":"RegisterRequest"},"RelationshipResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"Related user ID"},"status":{"type":"string","title":"Status","description":"Relationship status"},"created_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created At","description":"Creation timestamp"}},"type":"object","required":["user_id","status"],"title":"RelationshipResponse","description":"Relationship response model."},"ReportResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether report was successful"},"report_id":{"type":"string","title":"Report Id","description":"ID of the created report"},"message":{"type":"string","title":"Message","description":"Status message"}},"type":"object","required":["success","report_id","message"],"title":"ReportResponse","description":"Response for report submission."},"ResponseTimeEntry":{"properties":{"endpoint":{"type":"string","maxLength":255,"title":"Endpoint","description":"The endpoint being measured"},"method":{"type":"string","maxLength":10,"title":"Method","description":"The HTTP method used"},"response_time_ms":{"type":"number","minimum":0.0,"title":"Response Time Ms","description":"The response time in milliseconds"},"status_code":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Status Code","description":"The HTTP status code returned"},"db_queries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Db Queries","description":"Number of database queries executed","default":0},"db_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Db Time Ms","description":"Time spent executing database queries in ms","default":0.0},"timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timestamp","description":"The Unix timestamp of the measurement"}},"type":"object","required":["endpoint","method","response_time_ms","status_code"],"title":"ResponseTimeEntry","description":"A single response time measurement."},"RevokeAllSessionsRequest":{"properties":{"except_current":{"type":"boolean","title":"Except Current","description":"Whether to keep the current session","default":true}},"type":"object","title":"RevokeAllSessionsRequest","description":"Request to revoke all sessions."},"RevokeAllSessionsResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the operation was successful"},"revoked_count":{"type":"integer","title":"Revoked Count","description":"Number of sessions revoked"}},"type":"object","required":["success","revoked_count"],"title":"RevokeAllSessionsResponse","description":"Response for revoking all sessions."},"RoleCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Role name"},"color":{"anyOf":[{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},{"type":"null"}],"title":"Color","description":"Role color hex"},"permissions":{"additionalProperties":true,"type":"object","title":"Permissions","description":"Role permissions"},"hoist":{"type":"boolean","title":"Hoist","description":"Display separately in member list","default":false},"mentionable":{"type":"boolean","title":"Mentionable","description":"Can be mentioned","default":false}},"type":"object","required":["name"],"title":"RoleCreateRequest","description":"Role creation request."},"RoleResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Role ID"},"server_id":{"type":"string","title":"Server Id","description":"Server ID"},"name":{"type":"string","title":"Name","description":"Role name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Role color hex"},"position":{"type":"integer","title":"Position","description":"Role position","default":0},"permissions":{"additionalProperties":true,"type":"object","title":"Permissions","description":"Role permissions"},"hoist":{"type":"boolean","title":"Hoist","description":"Display separately in member list","default":false},"mentionable":{"type":"boolean","title":"Mentionable","description":"Can be mentioned","default":false},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this is the @everyone role","default":false}},"type":"object","required":["id","server_id","name"],"title":"RoleResponse","description":"Role information response."},"RoleUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name","description":"Role name"},"color":{"anyOf":[{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},{"type":"null"}],"title":"Color","description":"Role color hex"},"permissions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Permissions","description":"Role permissions"},"hoist":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hoist","description":"Display separately in member list"},"mentionable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mentionable","description":"Can be mentioned"},"position":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Position","description":"Role position"}},"type":"object","title":"RoleUpdateRequest","description":"Role update request."},"ScheduledDeletionListResponse":{"properties":{"deletions":{"items":{"$ref":"#/components/schemas/ScheduledDeletionResponse"},"type":"array","title":"Deletions","description":"Scheduled deletions"}},"type":"object","required":["deletions"],"title":"ScheduledDeletionListResponse","description":"List of scheduled deletions."},"ScheduledDeletionResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID"},"username":{"type":"string","title":"Username","description":"Username"},"scheduled_at":{"type":"integer","title":"Scheduled At","description":"Timestamp when deletion was scheduled"},"deletion_at":{"type":"integer","title":"Deletion At","description":"Timestamp when permanent purge will occur"},"days_left":{"type":"integer","title":"Days Left","description":"Approximate days remaining until purge"}},"type":"object","required":["user_id","username","scheduled_at","deletion_at","days_left"],"title":"ScheduledDeletionResponse","description":"Information about a scheduled account deletion."},"ServerCapabilitiesResponse":{"properties":{"avatars":{"$ref":"#/components/schemas/AvatarConfigResponse"},"access_token_required":{"type":"boolean","title":"Access Token Required","description":"Whether API access tokens are required","default":false}},"type":"object","required":["avatars"],"title":"ServerCapabilitiesResponse","description":"Global server capabilities and configuration."},"ServerCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":2,"title":"Name","description":"Server name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Server description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Server icon URL"}},"type":"object","required":["name"],"title":"ServerCreateRequest","description":"Server creation request."},"ServerResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Server ID"},"name":{"type":"string","title":"Name","description":"Server name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Server description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Server icon URL"},"owner_id":{"type":"string","title":"Owner Id","description":"Owner user ID"},"member_count":{"type":"integer","title":"Member Count","description":"Number of members","default":0},"default_channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Channel Id","description":"Default channel ID"},"verification_level":{"type":"integer","title":"Verification Level","description":"Verification level required to join","default":0},"default_message_notifications":{"type":"integer","title":"Default Message Notifications","description":"Default notification level","default":0},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"}},"type":"object","required":["id","name","owner_id","created_at"],"title":"ServerResponse","description":"Server information response."},"ServerSearchPageResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ServerSearchResultResponse"},"type":"array","title":"Results"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["results"],"title":"ServerSearchPageResponse","description":"Paginated server search results."},"ServerSearchResultResponse":{"properties":{"server_id":{"type":"string","title":"Server Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"member_count":{"type":"integer","title":"Member Count","default":0},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"score":{"type":"number","title":"Score","default":0.0}},"type":"object","required":["server_id","name"],"title":"ServerSearchResultResponse","description":"Server search result equivalent to ServerSearchResult."},"ServerState":{"type":"string","enum":["running","maintenance","shutting_down","restarting"],"title":"ServerState","description":"Server operational states."},"ServerStatusResponse":{"properties":{"state":{"$ref":"#/components/schemas/ServerState","description":"Current server state"},"version":{"$ref":"#/components/schemas/VersionInfo"},"uptime_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uptime Seconds","description":"Server uptime in seconds"},"maintenance_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maintenance Message","description":"Maintenance announcement"},"estimated_downtime_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Downtime Seconds","description":"Estimated downtime if shutting down"},"restart_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Restart At","description":"ISO timestamp of scheduled restart"}},"type":"object","required":["state","version"],"title":"ServerStatusResponse","description":"Server status response."},"ServerUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":2},{"type":"null"}],"title":"Name","description":"Server name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Server description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Server icon URL"},"default_channel_id":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Default Channel Id","description":"Default channel ID to select when joining"}},"type":"object","title":"ServerUpdateRequest","description":"Server update request."},"ServerVersionResponse":{"properties":{"version":{"$ref":"#/components/schemas/VersionInfo"},"min_supported_version":{"anyOf":[{"$ref":"#/components/schemas/VersionInfo"},{"type":"null"}],"description":"Minimum client version supported"},"api_version":{"type":"string","title":"Api Version","description":"API version prefix (e.g., 'v1')"}},"type":"object","required":["version","api_version"],"title":"ServerVersionResponse","description":"Server version information response."},"SessionResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Session ID"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Device ID"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address","description":"IP address"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent","description":"User agent"},"created_at":{"type":"integer","title":"Created At","description":"Session creation timestamp"},"expires_at":{"type":"integer","title":"Expires At","description":"Session expiration timestamp"},"last_activity":{"type":"integer","title":"Last Activity","description":"Last activity timestamp"},"current":{"type":"boolean","title":"Current","description":"Whether this is the current session","default":false}},"type":"object","required":["id","created_at","expires_at","last_activity"],"title":"SessionResponse","description":"Session information response."},"SetTierRequest":{"properties":{"tier":{"type":"string","maxLength":50,"minLength":1,"title":"Tier","description":"Tier name"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Expiration timestamp (Unix)"}},"type":"object","required":["tier"],"title":"SetTierRequest","description":"Request to set user tier."},"SettingResponse":{"properties":{"key":{"type":"string","title":"Key","description":"Setting key"},"value":{"type":"string","title":"Value","description":"Setting value"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp (Unix)"},"updated_at":{"type":"integer","title":"Updated At","description":"Last update timestamp (Unix)"}},"type":"object","required":["key","value","created_at","updated_at"],"title":"SettingResponse","description":"Response for a single setting."},"SettingValue":{"properties":{"value":{"type":"string","maxLength":10000,"title":"Value","description":"Setting value"}},"type":"object","required":["value"],"title":"SettingValue","description":"Request body for setting a value."},"SettingsResponse":{"properties":{"settings":{"additionalProperties":{"type":"string"},"type":"object","title":"Settings","description":"Key-value pairs of settings"},"count":{"type":"integer","title":"Count","description":"Number of settings"},"limit":{"type":"integer","title":"Limit","description":"Max number of settings allowed"}},"type":"object","required":["settings","count","limit"],"title":"SettingsResponse","description":"Response for all settings."},"StickerPackResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Pack ID"},"name":{"type":"string","title":"Name","description":"Pack name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Pack description"},"pack_type":{"type":"string","title":"Pack Type","description":"Pack type"},"server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Id","description":"Server ID"},"sticker_count":{"type":"integer","title":"Sticker Count","description":"Number of stickers in pack","default":0},"stickers":{"items":{"$ref":"#/components/schemas/StickerResponse"},"type":"array","title":"Stickers","description":"Stickers in this pack"}},"type":"object","required":["id","name","pack_type"],"title":"StickerPackResponse","description":"Sticker pack response model."},"StickerResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Sticker ID"},"pack_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Id","description":"Pack ID"},"name":{"type":"string","title":"Name","description":"Sticker name"},"format":{"type":"string","title":"Format","description":"Sticker format (png, apng, json)"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Sticker tags"},"related_emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Emoji","description":"Related unicode emoji"},"url":{"type":"string","title":"Url","description":"Sticker image URL"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width","description":"Image width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height","description":"Image height"},"available":{"type":"boolean","title":"Available","description":"Whether sticker is available","default":true}},"type":"object","required":["id","pack_id","name","format","url"],"title":"StickerResponse","description":"Sticker response model."},"SuccessResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the operation was successful","default":true}},"type":"object","title":"SuccessResponse","description":"Simple success response."},"SystemMetrics":{"properties":{"cpu_percent":{"type":"number","title":"Cpu Percent","description":"CPU usage percentage"},"memory_percent":{"type":"number","title":"Memory Percent","description":"Memory usage percentage"},"memory_used_mb":{"type":"number","title":"Memory Used Mb","description":"Memory used in MB"},"memory_total_mb":{"type":"number","title":"Memory Total Mb","description":"Total memory in MB"},"disk_percent":{"type":"number","title":"Disk Percent","description":"Disk usage percentage"},"process_memory_mb":{"type":"number","title":"Process Memory Mb","description":"Process RSS memory in MB"},"thread_count":{"type":"integer","title":"Thread Count","description":"Number of active threads"},"uptime_seconds":{"type":"number","title":"Uptime Seconds","description":"Process uptime in seconds"}},"type":"object","required":["cpu_percent","memory_percent","memory_used_mb","memory_total_mb","disk_percent","process_memory_mb","thread_count","uptime_seconds"],"title":"SystemMetrics","description":"System health metrics."},"TelemetryEndpointStat":{"properties":{"endpoint":{"type":"string","title":"Endpoint","description":"Endpoint path"},"method":{"type":"string","title":"Method","description":"HTTP method"},"count":{"type":"integer","title":"Count","description":"Request count"},"avg_ms":{"type":"number","title":"Avg Ms","description":"Average response time in ms"},"min_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Ms","description":"Minimum response time in ms"},"max_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ms","description":"Maximum response time in ms"},"p50_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P50 Ms","description":"50th percentile response time in ms"},"p95_ms":{"type":"number","title":"P95 Ms","description":"95th percentile response time in ms"},"p99_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P99 Ms","description":"99th percentile response time in ms"},"error_rate":{"type":"number","title":"Error Rate","description":"Error rate percentage"},"error_count":{"type":"integer","title":"Error Count","description":"Total error count","default":0},"avg_queries":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Queries","description":"Average DB queries per request","default":0.0},"avg_query_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Query Time Ms","description":"Average DB query time in ms","default":0.0}},"type":"object","required":["endpoint","method","count","avg_ms","p95_ms","error_rate"],"title":"TelemetryEndpointStat","description":"Statistics for a single endpoint."},"TelemetryHistoryBucket":{"properties":{"timestamp":{"type":"integer","title":"Timestamp","description":"Bucket start timestamp"},"avg_ms":{"type":"number","title":"Avg Ms","description":"Average response time in this bucket"},"count":{"type":"integer","title":"Count","description":"Request count in this bucket"},"error_count":{"type":"integer","title":"Error Count","description":"Error count in this bucket"}},"type":"object","required":["timestamp","avg_ms","count","error_count"],"title":"TelemetryHistoryBucket","description":"A single time bucket in telemetry history."},"TelemetryHistoryResponse":{"properties":{"history":{"items":{"$ref":"#/components/schemas/TelemetryHistoryBucket"},"type":"array","title":"History","description":"History data buckets"}},"type":"object","required":["history"],"title":"TelemetryHistoryResponse","description":"Telemetry history response."},"TelemetryResetResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether reset was successful"},"deleted_count":{"type":"integer","title":"Deleted Count","description":"Number of records deleted"}},"type":"object","required":["success","deleted_count"],"title":"TelemetryResetResponse","description":"Telemetry reset response."},"TelemetryResponse":{"properties":{"accepted":{"type":"integer","title":"Accepted","description":"The number of entries accepted"},"message":{"type":"string","title":"Message","description":"A status message"}},"type":"object","required":["accepted","message"],"title":"TelemetryResponse","description":"Response for telemetry submission."},"TelemetryStatsResponse":{"properties":{"stats":{"items":{"$ref":"#/components/schemas/TelemetryEndpointStat"},"type":"array","title":"Stats","description":"Endpoint statistics"},"source":{"type":"string","title":"Source","description":"Data source filter applied"}},"type":"object","required":["stats","source"],"title":"TelemetryStatsResponse","description":"Telemetry statistics response."},"TelemetrySubmission":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/ResponseTimeEntry"},"type":"array","maxItems":100,"title":"Entries","description":"The list of measurements to submit"}},"type":"object","required":["entries"],"title":"TelemetrySubmission","description":"Batch submission of response time data."},"TicketResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Ticket ID"},"user_id":{"type":"string","title":"User Id","description":"User ID who submitted feedback"},"username":{"type":"string","title":"Username","description":"Username who submitted feedback"},"content":{"type":"string","title":"Content","description":"Feedback content"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Feedback category"},"rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating","description":"Feedback rating (1-5)"},"status":{"type":"string","title":"Status","description":"Ticket status"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"},"resolved_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resolved At","description":"Resolution timestamp"},"resolved_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved By","description":"Admin ID who resolved it"}},"type":"object","required":["id","user_id","username","content","status","created_at"],"title":"TicketResponse","description":"Feedback ticket response."},"TicketStatusUpdate":{"properties":{"status":{"type":"string","pattern":"^(open|in_progress|resolved|closed)$","title":"Status"}},"type":"object","required":["status"],"title":"TicketStatusUpdate","description":"Update ticket status."},"TierLimitsResponse":{"properties":{"name":{"type":"string","title":"Name","description":"Tier name"},"multiplier":{"type":"number","title":"Multiplier","description":"Multiplier for rate limits"},"max_voice_minutes_per_day":{"type":"integer","title":"Max Voice Minutes Per Day","description":"Max voice minutes per day"},"max_video_minutes_per_day":{"type":"integer","title":"Max Video Minutes Per Day","description":"Max video minutes per day"},"max_file_uploads_per_day":{"type":"integer","title":"Max File Uploads Per Day","description":"Max file uploads per day"},"max_file_size_mb":{"type":"integer","title":"Max File Size Mb","description":"Max file size in MB"},"max_servers":{"type":"integer","title":"Max Servers","description":"Max servers user can join"},"max_message_length":{"type":"integer","title":"Max Message Length","description":"Max characters per message"},"max_reactions_per_message":{"type":"integer","title":"Max Reactions Per Message","description":"Max reactions per message"},"max_pins_per_channel":{"type":"integer","title":"Max Pins Per Channel","description":"Max pins per channel"},"custom_emoji_slots":{"type":"integer","title":"Custom Emoji Slots","description":"Number of custom emoji slots"}},"type":"object","required":["name","multiplier","max_voice_minutes_per_day","max_video_minutes_per_day","max_file_uploads_per_day","max_file_size_mb","max_servers","max_message_length","max_reactions_per_message","max_pins_per_channel","custom_emoji_slots"],"title":"TierLimitsResponse","description":"Rate limit tier configuration details."},"TiersResponse":{"properties":{"tiers":{"additionalProperties":{"$ref":"#/components/schemas/TierLimitsResponse"},"type":"object","title":"Tiers","description":"Tier names mapped to their limits"},"default":{"type":"string","title":"Default","description":"Default tier name"}},"type":"object","required":["tiers","default"],"title":"TiersResponse","description":"Response for available tiers."},"TwoFactorConfirmRequest":{"properties":{"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code","description":"TOTP code from authenticator app"}},"type":"object","required":["code"],"title":"TwoFactorConfirmRequest","description":"Request to confirm 2FA setup."},"TwoFactorDisableRequest":{"properties":{"password":{"type":"string","title":"Password","description":"Current password"},"code":{"type":"string","maxLength":8,"minLength":6,"title":"Code","description":"Current TOTP code or backup code"}},"type":"object","required":["password","code"],"title":"TwoFactorDisableRequest","description":"Request to disable 2FA."},"TwoFactorRequest":{"properties":{"challenge_token":{"type":"string","title":"Challenge Token","description":"Challenge token from login"},"code":{"type":"string","maxLength":8,"minLength":6,"title":"Code","description":"2FA code or backup code"}},"type":"object","required":["challenge_token","code"],"title":"TwoFactorRequest","description":"Two-factor authentication request."},"TwoFactorSetupRequest":{"properties":{"password":{"type":"string","title":"Password","description":"Current password for confirmation"}},"type":"object","required":["password"],"title":"TwoFactorSetupRequest","description":"Request to setup 2FA."},"TwoFactorSetupResponse":{"properties":{"secret":{"type":"string","title":"Secret","description":"2FA secret key"},"qr_uri":{"type":"string","title":"Qr Uri","description":"QR code URI for authenticator app"},"backup_codes":{"items":{"type":"string"},"type":"array","title":"Backup Codes","description":"Backup codes"}},"type":"object","required":["secret","qr_uri"],"title":"TwoFactorSetupResponse","description":"Setup data for 2FA."},"TwoFactorStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether 2FA is enabled"},"backup_codes_remaining":{"type":"integer","title":"Backup Codes Remaining","description":"Number of backup codes remaining"}},"type":"object","required":["enabled","backup_codes_remaining"],"title":"TwoFactorStatusResponse","description":"Two-factor authentication status response."},"UnreadCountResponse":{"properties":{"channel_id":{"type":"string","title":"Channel Id","description":"Channel ID"},"unread_count":{"type":"integer","title":"Unread Count","description":"Number of unread messages"}},"type":"object","required":["channel_id","unread_count"],"title":"UnreadCountResponse","description":"Unread message count response."},"UpdateFeaturesRequest":{"properties":{"rate_limit_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Limit Tier","description":"New rate limit tier"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"New expiration timestamp (Unix)"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Admin notes for the change"}},"type":"object","title":"UpdateFeaturesRequest","description":"Request to update user features."},"UploadSessionInfo":{"properties":{"session_id":{"type":"string","title":"Session Id","description":"Unique upload session ID"},"filename":{"type":"string","title":"Filename","description":"Original filename"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"total_size":{"type":"integer","title":"Total Size","description":"Total file size in bytes"},"uploaded_chunks":{"type":"integer","title":"Uploaded Chunks","description":"Number of chunks uploaded"},"total_chunks":{"type":"integer","title":"Total Chunks","description":"Total number of chunks"},"progress_percent":{"type":"number","title":"Progress Percent","description":"Overall progress percentage"},"status":{"type":"string","title":"Status","description":"Session status (pending, uploading, complete, error)"},"expires_at":{"type":"integer","title":"Expires At","description":"Session expiration timestamp (Unix)"}},"type":"object","required":["session_id","filename","content_type","total_size","uploaded_chunks","total_chunks","progress_percent","status","expires_at"],"title":"UploadSessionInfo","description":"Information about an active upload session."},"UploadSessionsResponse":{"properties":{"sessions":{"items":{"$ref":"#/components/schemas/UploadSessionInfo"},"type":"array","title":"Sessions","description":"Active upload sessions"}},"type":"object","required":["sessions"],"title":"UploadSessionsResponse","description":"List of active upload sessions."},"UserAvatarResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the upload was successful"},"avatar_url":{"type":"string","title":"Avatar Url","description":"The URL of the uploaded avatar"},"width":{"type":"integer","title":"Width","description":"Avatar width in pixels"},"height":{"type":"integer","title":"Height","description":"Avatar height in pixels"},"size":{"type":"integer","title":"Size","description":"Avatar file size in bytes"},"animated":{"type":"boolean","title":"Animated","description":"Whether the avatar is animated","default":false}},"type":"object","required":["success","avatar_url","width","height","size"],"title":"UserAvatarResponse","description":"User avatar upload response."},"UserBadgeUpdateResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether update was successful"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges","description":"Updated list of badges"}},"type":"object","required":["success","badges"],"title":"UserBadgeUpdateResponse","description":"Response for user badge update."},"UserDeletionRequest":{"properties":{"password":{"type":"string","title":"Password","description":"Current password for verification"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"2FA code (required if enabled)"}},"type":"object","required":["password"],"title":"UserDeletionRequest","description":"Account deletion request."},"UserDetailsResponse":{"properties":{"id":{"type":"string","title":"Id","description":"User ID as string"},"username":{"type":"string","title":"Username","description":"Username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address"},"tier":{"type":"string","title":"Tier","description":"User tier"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges","description":"User badges"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"},"deletion_status":{"type":"string","title":"Deletion Status","description":"Account deletion status","default":"active"},"deletion_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deletion At","description":"Scheduled deletion timestamp"},"last_login":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Login","description":"Last login timestamp"},"account_locked":{"type":"boolean","title":"Account Locked","description":"Whether account is locked","default":false},"locked_until":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Locked Until","description":"Lock expiration timestamp"},"force_username_change":{"type":"boolean","title":"Force Username Change","description":"Whether user must change name","default":false}},"type":"object","required":["id","username","tier","badges","created_at"],"title":"UserDetailsResponse","description":"Detailed user information for admin."},"UserFeaturesResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID"},"rate_limit_tier":{"type":"string","title":"Rate Limit Tier","description":"Current rate limit tier"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges","description":"List of badge names"},"tier_limits":{"$ref":"#/components/schemas/TierLimitsResponse","description":"Rate limit values for the tier"},"expires_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires At","description":"Expiration timestamp (Unix)"}},"type":"object","required":["user_id","rate_limit_tier","badges","tier_limits"],"title":"UserFeaturesResponse","description":"Response for user features (admin view)."},"UserLockRequest":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID to lock"},"duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Seconds","description":"Lock duration in seconds (null for permanent)"}},"type":"object","required":["user_id"],"title":"UserLockRequest","description":"Request to lock/suspend a user account."},"UserNotesResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"notes":{"type":"string","title":"Notes"}},"type":"object","required":["user_id","notes"],"title":"UserNotesResponse","description":"Response for user notes."},"UserNotesUpdate":{"properties":{"notes":{"type":"string","maxLength":5000,"title":"Notes"}},"type":"object","required":["notes"],"title":"UserNotesUpdate","description":"Request to update user notes."},"UserPublicResponse":{"properties":{"id":{"type":"string","title":"Id","description":"User ID"},"username":{"type":"string","title":"Username","description":"Username"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Avatar URL"},"created_at":{"type":"integer","title":"Created At","description":"Account creation timestamp"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges","description":"User profile badges"}},"type":"object","required":["id","username","created_at"],"title":"UserPublicResponse","description":"Public user information response."},"UserReportRequest":{"properties":{"user_id":{"type":"string","title":"User Id","description":"ID of the user to report"},"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason","description":"Reason for report"},"category":{"type":"string","title":"Category","description":"Report category","default":"other"},"details":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Details","description":"Additional details"},"evidence_message_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Evidence Message Ids","description":"Message IDs as evidence"}},"type":"object","required":["user_id","reason"],"title":"UserReportRequest","description":"Report a user."},"UserReportResponse":{"properties":{"id":{"type":"string","title":"Id"},"reported_user_id":{"type":"string","title":"Reported User Id"},"reporter_id":{"type":"string","title":"Reporter Id"},"reason":{"type":"string","title":"Reason"},"category":{"type":"string","title":"Category"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details"},"evidence_message_ids":{"items":{"type":"string"},"type":"array","title":"Evidence Message Ids"},"status":{"type":"string","title":"Status"},"reported_at":{"type":"integer","title":"Reported At"},"reviewed_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviewed At"},"reviewed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"},"action_taken":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Taken"}},"type":"object","required":["id","reported_user_id","reporter_id","reason","category","status","reported_at"],"title":"UserReportResponse","description":"User report row for admin review."},"UserResponse":{"properties":{"id":{"type":"string","title":"Id","description":"User ID"},"username":{"type":"string","title":"Username","description":"Username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email (only for own user)"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Avatar URL"},"created_at":{"type":"integer","title":"Created At","description":"Account creation timestamp"},"email_verified":{"type":"boolean","title":"Email Verified","description":"Email verification status","default":false},"totp_enabled":{"type":"boolean","title":"Totp Enabled","description":"2FA enabled status","default":false},"age_verified":{"type":"boolean","title":"Age Verified","description":"Age verification status","default":false},"badges":{"items":{"type":"string"},"type":"array","title":"Badges","description":"User badges"},"deletion_status":{"type":"string","title":"Deletion Status","description":"Account deletion status","default":"active"},"deletion_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deletion At","description":"Scheduled deletion timestamp"}},"type":"object","required":["id","username","created_at"],"title":"UserResponse","description":"User information response."},"UserSearchListResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserSearchResponse"},"type":"array","title":"Users","description":"Search results"}},"type":"object","required":["users"],"title":"UserSearchListResponse","description":"List of user search results."},"UserSearchPageResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/UserSearchResultResponse"},"type":"array","title":"Results"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["results"],"title":"UserSearchPageResponse","description":"Paginated user search results."},"UserSearchResponse":{"properties":{"id":{"type":"string","title":"Id","description":"User ID as string"},"username":{"type":"string","title":"Username","description":"Username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address"},"tier":{"type":"string","title":"Tier","description":"User tier"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges","description":"User badges"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"},"deletion_status":{"type":"string","title":"Deletion Status","description":"Account deletion status","default":"active"},"deletion_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deletion At","description":"Scheduled deletion timestamp"}},"type":"object","required":["id","username","tier","badges","created_at"],"title":"UserSearchResponse","description":"User search result."},"UserSearchResultResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"username":{"type":"string","title":"Username"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges"},"score":{"type":"number","title":"Score","default":0.0}},"type":"object","required":["user_id","username"],"title":"UserSearchResultResponse","description":"User search result equivalent to UserSearchResult."},"UserTierUpdate":{"properties":{"tier":{"type":"string","pattern":"^(free|alpha|beta|premium|staff)$","title":"Tier"}},"type":"object","required":["tier"],"title":"UserTierUpdate","description":"Update user tier."},"UserUpdateRequest":{"properties":{"username":{"anyOf":[{"type":"string","maxLength":32,"minLength":3},{"type":"null"}],"title":"Username","description":"New username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"New email"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"New avatar URL"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"New password"},"current_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Password","description":"Current password (required for password change)"}},"type":"object","title":"UserUpdateRequest","description":"User update request."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VersionErrorDetail":{"properties":{"code":{"type":"string","title":"Code","description":"Error code"},"message":{"type":"string","title":"Message","description":"Human-readable error message"},"client_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Version","description":"Client's version"},"min_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Version","description":"Minimum required version"},"server_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Version","description":"Current server version"},"update_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Update Url","description":"URL to download update"}},"type":"object","required":["code","message"],"title":"VersionErrorDetail","description":"Version-related error details."},"VersionErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/VersionErrorDetail"}},"type":"object","required":["error"],"title":"VersionErrorResponse","description":"Version error response wrapper."},"VersionInfo":{"properties":{"stage":{"type":"string","title":"Stage","description":"Version stage: a (alpha), b (beta), c (candidate), r (release)"},"major":{"type":"integer","title":"Major","description":"Major version number"},"minor":{"type":"integer","title":"Minor","description":"Minor version number"},"build":{"type":"integer","title":"Build","description":"Build number"},"string":{"type":"string","title":"String","description":"Full version string (e.g., 'a.1.0-1')"}},"type":"object","required":["stage","major","minor","build","string"],"title":"VersionInfo","description":"Version information."},"VersionNegotiateRequest":{"properties":{"client_version":{"type":"string","title":"Client Version","description":"Client's current version string"},"supported_versions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Versions","description":"List of server versions client supports"}},"type":"object","required":["client_version"],"title":"VersionNegotiateRequest","description":"Client version negotiation request."},"VersionNegotiateResponse":{"properties":{"compatible":{"type":"boolean","title":"Compatible","description":"Whether client is compatible with server"},"server_version":{"$ref":"#/components/schemas/VersionInfo"},"client_version":{"$ref":"#/components/schemas/VersionInfo"},"min_supported_version":{"anyOf":[{"$ref":"#/components/schemas/VersionInfo"},{"type":"null"}]},"update_required":{"type":"boolean","title":"Update Required","description":"Client must update to continue","default":false},"update_recommended":{"type":"boolean","title":"Update Recommended","description":"Client should update soon","default":false},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Human-readable status message"},"update_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Update Url","description":"URL to download client update"}},"type":"object","required":["compatible","server_version","client_version"],"title":"VersionNegotiateResponse","description":"Version negotiation response."},"VoiceChannelInfoResponse":{"properties":{"channel_id":{"type":"string","title":"Channel Id","description":"The ID of the voice channel"},"session_id":{"type":"string","title":"Session Id","description":"The session ID for the voice connection"},"ice_servers":{"items":{"$ref":"#/components/schemas/ICEServerConfig"},"type":"array","title":"Ice Servers","description":"List of ICE server configurations"},"bitrate":{"type":"integer","title":"Bitrate","description":"The recommended bitrate for the voice connection"}},"type":"object","required":["channel_id","session_id","ice_servers","bitrate"],"title":"VoiceChannelInfoResponse","description":"Response for voice channel connection info."},"WebhookCreateRequest":{"properties":{"channel_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Channel Id","description":"Channel ID for the webhook"},"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name","description":"Webhook name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Webhook avatar URL"}},"type":"object","required":["channel_id","name"],"title":"WebhookCreateRequest","description":"Webhook creation request."},"WebhookExecuteRequest":{"properties":{"content":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Content","description":"Message content"},"username":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Username","description":"Override username"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Override avatar URL"},"embeds":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Embeds","description":"Rich embeds"},"thread_id":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Thread Id","description":"Thread ID to post to"}},"type":"object","title":"WebhookExecuteRequest","description":"Webhook execution request."},"WebhookMessageResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Message ID"},"webhook_id":{"type":"string","title":"Webhook Id","description":"Webhook ID"},"channel_id":{"type":"string","title":"Channel Id","description":"Channel ID"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"Message content"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username","description":"Username override"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Avatar override"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"}},"type":"object","required":["id","webhook_id","channel_id","created_at"],"title":"WebhookMessageResponse","description":"Webhook message response model."},"WebhookUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":80,"minLength":1},{"type":"null"}],"title":"Name","description":"Webhook name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Webhook avatar URL"},"channel_id":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Channel Id","description":"New channel ID"}},"type":"object","title":"WebhookUpdateRequest","description":"Webhook update request."},"src__api__routes__RootResponse":{"properties":{"version":{"type":"string","title":"Version"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["version","status","message"],"title":"RootResponse","description":"API root response schema."},"src__api__schemas__admin__AutomodRuleAction":{"properties":{"action_type":{"type":"string","title":"Action Type"},"duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Seconds"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"notify_user":{"type":"boolean","title":"Notify User","default":true},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["action_type"],"title":"AutomodRuleAction"},"src__api__schemas__admin__AutomodRuleCreateRequest":{"properties":{"server_id":{"type":"integer","title":"Server Id"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"rule_type":{"type":"string","title":"Rule Type"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"actions":{"items":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleAction"},"type":"array","title":"Actions"},"exempt_roles":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Exempt Roles"},"exempt_channels":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Exempt Channels"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority","default":0},"check_all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Check All","default":false},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","default":true}},"type":"object","required":["server_id","name","rule_type","config","actions"],"title":"AutomodRuleCreateRequest"},"src__api__schemas__admin__AutomodRuleResponse":{"properties":{"id":{"type":"string","title":"Id"},"server_id":{"type":"string","title":"Server Id"},"name":{"type":"string","title":"Name"},"rule_type":{"type":"string","title":"Rule Type"},"enabled":{"type":"boolean","title":"Enabled"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"actions":{"items":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleAction"},"type":"array","title":"Actions"},"exempt_roles":{"items":{"type":"string"},"type":"array","title":"Exempt Roles"},"exempt_channels":{"items":{"type":"string"},"type":"array","title":"Exempt Channels"},"priority":{"type":"integer","title":"Priority"},"check_all":{"type":"boolean","title":"Check All"},"created_at":{"type":"integer","title":"Created At"},"updated_at":{"type":"integer","title":"Updated At"},"created_by":{"type":"string","title":"Created By"}},"type":"object","required":["id","server_id","name","rule_type","enabled","config","actions","exempt_roles","exempt_channels","priority","check_all","created_at","updated_at","created_by"],"title":"AutomodRuleResponse"},"src__api__schemas__admin__AutomodRuleUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"actions":{"anyOf":[{"items":{"$ref":"#/components/schemas/src__api__schemas__admin__AutomodRuleAction"},"type":"array"},{"type":"null"}],"title":"Actions"},"exempt_roles":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Exempt Roles"},"exempt_channels":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Exempt Channels"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"check_all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Check All"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"AutomodRuleUpdateRequest"},"src__api__schemas__admin__HashReportResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Report ID"},"hash_value":{"type":"string","title":"Hash Value","description":"SHA-256 hash"},"phash_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phash Value","description":"Perceptual hash"},"reporter_id":{"type":"string","title":"Reporter Id","description":"User ID who reported"},"reporter_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Username","description":"Username who reported"},"reason":{"type":"string","title":"Reason","description":"Report reason"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details","description":"Report details"},"status":{"type":"string","title":"Status","description":"Report status"},"reported_at":{"type":"integer","title":"Reported At","description":"Report timestamp"},"reviewed_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviewed At","description":"Review timestamp"},"reviewed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By","description":"Admin ID who reviewed"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes","description":"Admin notes"},"uploader_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploader Id","description":"Uploader user ID"},"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id","description":"Message ID"},"attachment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Url","description":"Attachment URL"},"block_uploader":{"type":"boolean","title":"Block Uploader","description":"Whether to block uploader","default":false}},"type":"object","required":["id","hash_value","reporter_id","reason","status","reported_at"],"title":"HashReportResponse","description":"Hash report for admin review."},"src__api__schemas__common__RootResponse":{"properties":{"name":{"type":"string","title":"Name","description":"API name"},"version":{"type":"string","title":"Version","description":"API version"},"docs":{"type":"string","title":"Docs","description":"API docs URL"},"api":{"type":"string","title":"Api","description":"API prefix"},"api_docs":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Docs","description":"Detailed API documentation path"}},"type":"object","required":["name","version","docs","api"],"title":"RootResponse","description":"Root endpoint response."},"src__api__schemas__media__HashReportResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether report was successfully submitted"},"report_id":{"type":"string","title":"Report Id","description":"Generated report ID"},"message":{"type":"string","title":"Message","description":"Success or info message"}},"type":"object","required":["success","report_id","message"],"title":"HashReportResponse","description":"Response for hash report submission."},"src__api__schemas__presence__PresenceResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID"},"status":{"type":"string","title":"Status","description":"Current status"},"custom_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Status","description":"Custom status text"},"custom_emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Emoji","description":"Custom status emoji"},"last_seen":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Seen","description":"Last seen timestamp"}},"type":"object","required":["user_id","status"],"title":"PresenceResponse","description":"Presence response model."},"src__api__schemas__servers__AutomodRuleAction":{"properties":{"action_type":{"type":"string","title":"Action Type","description":"Action type (delete_message, timeout_user, etc.)"},"duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Seconds","description":"Duration for timeout/ban"},"reason":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reason","description":"Reason for action"},"notify_user":{"type":"boolean","title":"Notify User","description":"Whether to notify the user","default":true},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"Additional metadata"}},"type":"object","required":["action_type"],"title":"AutomodRuleAction","description":"Automod rule action schema."},"src__api__schemas__servers__AutomodRuleCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"rule_type":{"type":"string","title":"Rule Type","description":"Rule type"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Rule configuration"},"actions":{"items":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleAction"},"type":"array","title":"Actions","description":"Actions to take"},"applied_roles":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Applied Roles","description":"Role IDs this rule applies to"},"exempt_roles":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Exempt Roles","description":"Exempt role IDs"},"exempt_channels":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Exempt Channels","description":"Exempt channel IDs"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority","description":"Rule priority","default":0},"check_all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Check All","description":"Whether to check all rules","default":false},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","description":"Whether rule is enabled","default":true}},"type":"object","required":["name","rule_type","config","actions"],"title":"AutomodRuleCreateRequest","description":"Automod rule creation request."},"src__api__schemas__servers__AutomodRuleResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Rule ID"},"server_id":{"type":"string","title":"Server Id","description":"Server ID"},"name":{"type":"string","title":"Name","description":"Rule name"},"rule_type":{"type":"string","title":"Rule Type","description":"Rule type"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether rule is enabled"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Rule configuration"},"actions":{"items":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleAction"},"type":"array","title":"Actions","description":"Actions to take"},"applied_roles":{"items":{"type":"string"},"type":"array","title":"Applied Roles","description":"Role IDs this rule applies to (empty = everyone)"},"exempt_roles":{"items":{"type":"string"},"type":"array","title":"Exempt Roles","description":"Exempt role IDs"},"exempt_channels":{"items":{"type":"string"},"type":"array","title":"Exempt Channels","description":"Exempt channel IDs"},"priority":{"type":"integer","title":"Priority","description":"Rule priority","default":0},"check_all":{"type":"boolean","title":"Check All","description":"Whether to check all rules after match","default":false},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"integer","title":"Updated At","description":"Update timestamp"},"created_by":{"type":"string","title":"Created By","description":"User ID who created the rule"}},"type":"object","required":["id","server_id","name","rule_type","enabled","config","actions","created_at","updated_at","created_by"],"title":"AutomodRuleResponse","description":"Automod rule response schema."},"src__api__schemas__servers__AutomodRuleUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"actions":{"anyOf":[{"items":{"$ref":"#/components/schemas/src__api__schemas__servers__AutomodRuleAction"},"type":"array"},{"type":"null"}],"title":"Actions"},"applied_roles":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Applied Roles"},"exempt_roles":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Exempt Roles"},"exempt_channels":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Exempt Channels"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"check_all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Check All"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"AutomodRuleUpdateRequest","description":"Automod rule update request."},"src__api__schemas__servers__PresenceResponse":{"properties":{"status":{"type":"string","title":"Status","description":"User status: online, idle, dnd, offline","default":"offline"}},"type":"object","title":"PresenceResponse","description":"Presence information."},"src__api__schemas__servers__WebhookResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Webhook ID"},"channel_id":{"type":"string","title":"Channel Id","description":"Channel ID"},"server_id":{"type":"string","title":"Server Id","description":"Server ID"},"creator_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Id","description":"Creator user ID"},"name":{"type":"string","title":"Name","description":"Webhook name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Webhook avatar URL"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"}},"type":"object","required":["id","channel_id","server_id","name","created_at"],"title":"WebhookResponse","description":"Webhook information response."},"src__api__schemas__webhooks__WebhookResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Webhook ID"},"channel_id":{"type":"string","title":"Channel Id","description":"Channel ID"},"server_id":{"type":"string","title":"Server Id","description":"Server ID"},"creator_id":{"type":"string","title":"Creator Id","description":"Creator user ID"},"name":{"type":"string","title":"Name","description":"Webhook name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Webhook avatar URL"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token","description":"Webhook token (only on create)"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Webhook URL (only on create)"},"created_at":{"type":"integer","title":"Created At","description":"Creation timestamp"}},"type":"object","required":["id","channel_id","server_id","creator_id","name","created_at"],"title":"WebhookResponse","description":"Webhook response model."}}}}