{"openapi":"3.1.0","info":{"title":"CapPilot","description":"AI-powered stock market analysis service","version":"2.0.0"},"paths":{"/api/auth/check-email":{"post":{"tags":["auth"],"summary":"Check Email","description":"Check if email is already registered","operationId":"check_email_api_auth_check_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/register":{"post":{"tags":["auth"],"summary":"Register","description":"Register a new user","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/oauth-started":{"post":{"tags":["auth"],"summary":"Oauth Started","description":"Отметить уход на провайдера — первый шаг OAuth-пути.\n\nБраузер шлёт это beacon'ом перед самим редиректом, поэтому событие переживает\nнавигацию. Дальше пара «ушёл / вернулся» показывает обрывы: без неё\nсорвавшийся вход выглядит просто как отсутствие регистраций.","operationId":"oauth_started_api_auth_oauth_started_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/oauth-complete":{"post":{"tags":["auth"],"summary":"Oauth Complete","description":"Report the outcome of a social sign-in to the funnel.\n\nA Google sign-in never touches /register — it goes browser → Supabase → /auth/callback,\nso the whole funnel was blind to it: the only real signup of August (25.08, via Google)\nleft no analytics trace and was found by hand in the database. The callback page calls\nthis with its fresh access token; the token is verified here, and a user whose account\nwas created moments ago is a signup, not a login.","operationId":"oauth_complete_api_auth_oauth_complete_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","description":"Login user and return access token","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh Token","description":"Refresh access token","operationId":"refresh_token_api_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","description":"Logout current user","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/me":{"get":{"tags":["auth"],"summary":"Get Current User","description":"Get current user information","operationId":"get_current_user_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Forgot Password","description":"Send password reset email","operationId":"forgot_password_api_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/reset-password":{"post":{"tags":["auth"],"summary":"Reset Password","description":"Reset user password with token","operationId":"reset_password_api_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/verify-email":{"post":{"tags":["auth"],"summary":"Verify Email","description":"Verify email with OTP code","operationId":"verify_email_api_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/resend-verification":{"post":{"tags":["auth"],"summary":"Resend Verification","description":"Resend verification code","operationId":"resend_verification_api_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/user-status":{"get":{"tags":["auth"],"summary":"Get User Status","description":"Get current user registration status","operationId":"get_user_status_api_auth_user_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/update-password":{"post":{"tags":["auth"],"summary":"Update Password","description":"Update user password (for invited users setting their first password)","operationId":"update_password_api_auth_update_password_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/process-pending-alert":{"post":{"tags":["auth"],"summary":"Process Pending Alert","description":"Process pending alert for OAuth users after registration","operationId":"process_pending_alert_api_auth_process_pending_alert_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/api/auth/init-oauth-user":{"post":{"tags":["auth"],"summary":"Init Oauth User","description":"Initialize OAuth user - create default watchlist and portfolio if they don't exist","operationId":"init_oauth_user_api_auth_init_oauth_user_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/api/users/profile":{"get":{"tags":["users"],"summary":"Get User Profile","description":"Get current user's profile","operationId":"get_user_profile_api_users_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["users"],"summary":"Update User Profile","description":"Update current user's profile","operationId":"update_user_profile_api_users_profile_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Update Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/users/notification-settings":{"get":{"tags":["users"],"summary":"Get Notification Settings","description":"Get current user's notification settings","operationId":"get_notification_settings_api_users_notification_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["users"],"summary":"Update Notification Settings","description":"Update current user's notification settings","operationId":"update_notification_settings_api_users_notification_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotificationSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/users/telegram-link-token":{"post":{"tags":["users"],"summary":"Create Telegram Link Token","description":"One-time deep-link token to connect this account to the Telegram agent.\n\nThe web button calls this and opens https://t.me/<bot>?start=<token>; the bot\nexchanges the token for a chat<->account link (bot_account_links). Token TTL 15 min,\nsingle-use.","operationId":"create_telegram_link_token_api_users_telegram_link_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/users/telegram-link-status":{"get":{"tags":["users"],"summary":"Telegram Link Status","description":"Whether this account already has a Telegram agent chat linked (drives the\nvisibility of the connect button in the portfolio header).","operationId":"telegram_link_status_api_users_telegram_link_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/search":{"get":{"tags":["instruments"],"summary":"Search Instruments","description":"Search financial instruments by name, ticker, or short name (public endpoint)","operationId":"search_instruments_api_financial_instruments_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query for instruments","title":"Q"},"description":"Search query for instruments"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of results","default":5,"title":"Limit"},"description":"Maximum number of results"},{"name":"yahoo_search","in":"query","required":false,"schema":{"type":"boolean","description":"Search in Yahoo Finance for tickers","default":false,"title":"Yahoo Search"},"description":"Search in Yahoo Finance for tickers"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/financial-instruments/all":{"get":{"tags":["instruments"],"summary":"Get All Financial Instruments","description":"Get all financial instruments for market overview (authenticated endpoint)","operationId":"get_all_financial_instruments_api_financial_instruments_all_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":24,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search term for instruments","default":"","title":"Search"},"description":"Search term for instruments"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Filter by instrument type","default":"","title":"Type"},"description":"Filter by instrument type"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort order: popular, name_asc, name_desc, change_1d_asc, change_1d_desc, ticker_asc, ticker_desc","default":"popular","title":"Sort"},"description":"Sort order: popular, name_asc, name_desc, change_1d_asc, change_1d_desc, ticker_asc, ticker_desc"},{"name":"tags","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated tag filters: near_52w_high, near_52w_low, earnings_soon, has_news, has_report, trending","default":"","title":"Tags"},"description":"Comma-separated tag filters: near_52w_high, near_52w_low, earnings_soon, has_news, has_report, trending"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/financial-instruments/types":{"get":{"tags":["instruments"],"summary":"Get Instrument Types","description":"Get all available instrument types (authenticated endpoint)","operationId":"get_instrument_types_api_financial_instruments_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/favorites":{"get":{"tags":["instruments"],"summary":"Get User Favorites","description":"Get user's watchlist instruments","operationId":"get_user_favorites_api_financial_instruments_favorites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/gainers":{"get":{"tags":["instruments"],"summary":"Get Top Gainers","description":"Get top gaining instruments (>+2% in 1D)","operationId":"get_top_gainers_api_financial_instruments_gainers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Maximum number of gainers to return","default":10,"title":"Limit"},"description":"Maximum number of gainers to return"},{"name":"fromWatchlist","in":"query","required":false,"schema":{"type":"boolean","description":"Filter by user's watchlist instruments","default":false,"title":"Fromwatchlist"},"description":"Filter by user's watchlist instruments"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/losers":{"get":{"tags":["instruments"],"summary":"Get Top Losers","description":"Get top losing instruments (<-2% in 1D)","operationId":"get_top_losers_api_financial_instruments_losers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Maximum number of losers to return","default":10,"title":"Limit"},"description":"Maximum number of losers to return"},{"name":"fromWatchlist","in":"query","required":false,"schema":{"type":"boolean","description":"Filter by user's watchlist instruments","default":false,"title":"Fromwatchlist"},"description":"Filter by user's watchlist instruments"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/{instrument_id}/favorite":{"post":{"tags":["instruments"],"summary":"Add To Favorites","description":"Add instrument to watchlist","operationId":"add_to_favorites_api_financial_instruments__instrument_id__favorite_post","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["instruments"],"summary":"Remove From Favorites","description":"Remove instrument from watchlist","operationId":"remove_from_favorites_api_financial_instruments__instrument_id__favorite_delete","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/by-ticker/{ticker}":{"get":{"tags":["instruments"],"summary":"Get Instrument By Ticker","description":"Get financial instrument by exact ticker match","operationId":"get_instrument_by_ticker_api_financial_instruments_by_ticker__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/{instrument_id}":{"get":{"tags":["instruments"],"summary":"Get Instrument","description":"Get financial instrument by ID","operationId":"get_instrument_api_financial_instruments__instrument_id__get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/{instrument_id}/prices":{"get":{"tags":["instruments"],"summary":"Get Instrument Prices","description":"Get price history for financial instrument","operationId":"get_instrument_prices_api_financial_instruments__instrument_id__prices_get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days of price history","default":30,"title":"Days"},"description":"Number of days of price history"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/{instrument_id}/latest-price":{"get":{"tags":["instruments"],"summary":"Get Latest Price","description":"Get latest price for financial instrument","operationId":"get_latest_price_api_financial_instruments__instrument_id__latest_price_get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/{instrument_id}/demo":{"get":{"tags":["instruments"],"summary":"Get Instrument Demo","description":"Get demo information about a financial instrument (public endpoint for onboarding)","operationId":"get_instrument_demo_api_financial_instruments__instrument_id__demo_get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/{instrument_id}/details":{"get":{"tags":["instruments"],"summary":"Get Instrument Details","description":"Get detailed information about a financial instrument including prices, news, and reports","operationId":"get_instrument_details_api_financial_instruments__instrument_id__details_get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/request":{"post":{"tags":["instruments"],"summary":"Request New Asset","description":"Request addition of a new financial instrument","operationId":"request_new_asset_api_financial_instruments_request_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/validate-ticker":{"post":{"tags":["instruments"],"summary":"Validate Ticker Endpoint","description":"Validate ticker using Yahoo Finance","operationId":"validate_ticker_endpoint_api_financial_instruments_validate_ticker_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/financial-instruments/{instrument_id}/attention":{"get":{"tags":["instruments"],"summary":"Get Instrument Attention Indicators","description":"Get attention indicators for a specific financial instrument","operationId":"get_instrument_attention_indicators_api_financial_instruments__instrument_id__attention_get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/watchlists":{"get":{"tags":["watchlists"],"summary":"Get User Watchlists","description":"Get all watchlists for current user","operationId":"get_user_watchlists_api_watchlists_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["watchlists"],"summary":"Create Watchlist","description":"Create new watchlist","operationId":"create_watchlist_api_watchlists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWatchlistCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/watchlists/":{"get":{"tags":["watchlists"],"summary":"Get User Watchlists","description":"Get all watchlists for current user","operationId":"get_user_watchlists_api_watchlists__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["watchlists"],"summary":"Create Watchlist","description":"Create new watchlist","operationId":"create_watchlist_api_watchlists__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWatchlistCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/watchlists/{watchlist_id}":{"get":{"tags":["watchlists"],"summary":"Get Watchlist","description":"Get specific watchlist by ID","operationId":"get_watchlist_api_watchlists__watchlist_id__get","parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","title":"Watchlist Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["watchlists"],"summary":"Update Watchlist","description":"Update watchlist","operationId":"update_watchlist_api_watchlists__watchlist_id__put","parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","title":"Watchlist Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWatchlistUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["watchlists"],"summary":"Delete Watchlist","description":"Delete watchlist","operationId":"delete_watchlist_api_watchlists__watchlist_id__delete","parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","title":"Watchlist Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/reports":{"get":{"tags":["reports"],"summary":"Get User Reports","description":"Get reports for current user","operationId":"get_user_reports_api_reports_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"watchlist_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific watchlist ID","title":"Watchlist Id"},"description":"Filter by specific watchlist ID"},{"name":"fromWatchlist","in":"query","required":false,"schema":{"type":"boolean","description":"Filter by user's watchlist instruments","default":false,"title":"Fromwatchlist"},"description":"Filter by user's watchlist instruments"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/reports/":{"get":{"tags":["reports"],"summary":"Get User Reports","description":"Get reports for current user","operationId":"get_user_reports_api_reports__get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"watchlist_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific watchlist ID","title":"Watchlist Id"},"description":"Filter by specific watchlist ID"},{"name":"fromWatchlist","in":"query","required":false,"schema":{"type":"boolean","description":"Filter by user's watchlist instruments","default":false,"title":"Fromwatchlist"},"description":"Filter by user's watchlist instruments"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/reports/recent":{"get":{"tags":["reports"],"summary":"Get Recent Reports","description":"Get recent reports for dashboard.\nPrioritizes reports for portfolio instruments, then watchlist, then general.","operationId":"get_recent_reports_api_reports_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum number of recent reports to return","default":5,"title":"Limit"},"description":"Maximum number of recent reports to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/reports/{report_id}":{"get":{"tags":["reports"],"summary":"Get Report Detail","description":"Get detailed information about a specific report.\nSupports both full UUID and short ID (first 8 chars of UUID without hyphens).","operationId":"get_report_detail_api_reports__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/reports/instrument/{instrument_id}":{"get":{"tags":["reports"],"summary":"Get Reports By Instrument","description":"Get reports for specific financial instrument","operationId":"get_reports_by_instrument_api_reports_instrument__instrument_id__get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of reports to return","default":20,"title":"Limit"},"description":"Maximum number of reports to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/data-sync/sync-historical-data":{"post":{"tags":["data-sync"],"summary":"Sync Historical Data","description":"Sync historical data from Yahoo Finance\nIf ticker is provided, sync only that ticker\nIf no ticker, sync all instruments with tickers","operationId":"sync_historical_data_api_data_sync_sync_historical_data_post","parameters":[{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/data-sync/sync-current-prices":{"post":{"tags":["data-sync"],"summary":"Sync Current Prices","description":"Sync current prices from Yahoo Finance","operationId":"sync_current_prices_api_data_sync_sync_current_prices_post","parameters":[{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/data-sync/sync-status":{"get":{"tags":["data-sync"],"summary":"Get Sync Status","description":"Get status of last sync operations","operationId":"get_sync_status_api_data_sync_sync_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/data-sync/validate-ticker/{ticker}":{"post":{"tags":["data-sync"],"summary":"Validate Ticker","description":"Validate if ticker exists in Yahoo Finance","operationId":"validate_ticker_api_data_sync_validate_ticker__ticker__post","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/data-sync/test-yahoo-prices/{ticker}":{"get":{"tags":["data-sync"],"summary":"Test Yahoo Prices","description":"Test endpoint to fetch price data directly from Yahoo Finance","operationId":"test_yahoo_prices_api_data_sync_test_yahoo_prices__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Time period (1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max)","default":"1mo","title":"Period"},"description":"Time period (1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max)"},{"name":"interval","in":"query","required":false,"schema":{"type":"string","description":"Data interval (1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo)","default":"1d","title":"Interval"},"description":"Data interval (1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads":{"post":{"tags":["chat","chat"],"summary":"Create Thread","description":"Create a new chat thread with the first message","operationId":"create_thread_api_chat_threads_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateThreadRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"get":{"tags":["chat","chat"],"summary":"Get User Threads","description":"Get user's chat threads with pagination and optional instruments","operationId":"get_user_threads_api_chat_threads_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of threads to return","default":20,"title":"Limit"},"description":"Number of threads to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of threads to skip","default":0,"title":"Offset"},"description":"Number of threads to skip"},{"name":"include_instruments","in":"query","required":false,"schema":{"type":"boolean","description":"Include instruments for each thread","default":false,"title":"Include Instruments"},"description":"Include instruments for each thread"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/context-stats":{"get":{"tags":["chat","chat"],"summary":"Get Thread Context Stats","description":"Get token usage statistics for thread context","operationId":"get_thread_context_stats_api_chat_threads__thread_id__context_stats_get","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/messages":{"get":{"tags":["chat","chat"],"summary":"Get Thread Messages","description":"Get messages in a thread with pagination","operationId":"get_thread_messages_api_chat_threads__thread_id__messages_get","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of messages to return","default":50,"title":"Limit"},"description":"Number of messages to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of messages to skip","default":0,"title":"Offset"},"description":"Number of messages to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["chat","chat"],"summary":"Send Message","description":"Send a message to a thread and get AI response (streaming)","operationId":"send_message_api_chat_threads__thread_id__messages_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/messages/agent":{"post":{"tags":["chat","chat"],"summary":"Send Message With Agent","description":"Send message with agent (tool calling support)","operationId":"send_message_with_agent_api_chat_threads__thread_id__messages_agent_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/offers/{offer_id}":{"post":{"tags":["chat","chat"],"summary":"Accept Chat Offer","description":"Нажатие кнопки под ответом (отметка, план, напоминание) — в сервис агента.","operationId":"accept_chat_offer_api_chat_offers__offer_id__post","parameters":[{"name":"offer_id","in":"path","required":true,"schema":{"type":"integer","title":"Offer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/instruments":{"get":{"tags":["chat","chat"],"summary":"Get Thread Instruments","description":"Get financial instruments associated with a thread","operationId":"get_thread_instruments_api_chat_threads__thread_id__instruments_get","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["chat","chat"],"summary":"Add Instrument To Thread","description":"Add a financial instrument to thread context (max 10)","operationId":"add_instrument_to_thread_api_chat_threads__thread_id__instruments_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddInstrumentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/by-instrument/{instrument_id}":{"get":{"tags":["chat","chat"],"summary":"Get Threads By Instrument","description":"Get user threads that contain a specific instrument","operationId":"get_threads_by_instrument_api_chat_threads_by_instrument__instrument_id__get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/instruments/{instrument_id}":{"delete":{"tags":["chat","chat"],"summary":"Remove Instrument From Thread","description":"Remove a financial instrument from thread context","operationId":"remove_instrument_from_thread_api_chat_threads__thread_id__instruments__instrument_id__delete","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/title":{"put":{"tags":["chat","chat"],"summary":"Update Thread Title","description":"Update thread title","operationId":"update_thread_title_api_chat_threads__thread_id__title_put","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTitleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}":{"delete":{"tags":["chat","chat"],"summary":"Delete Thread","description":"Delete a chat thread and all its messages","operationId":"delete_thread_api_chat_threads__thread_id__delete","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/web-search":{"get":{"tags":["chat","chat"],"summary":"Get Thread Web Search State","description":"Get web search state for a thread","operationId":"get_thread_web_search_state_api_chat_threads__thread_id__web_search_get","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["chat","chat"],"summary":"Update Thread Web Search State","description":"Update web search state for a thread","operationId":"update_thread_web_search_state_api_chat_threads__thread_id__web_search_patch","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSearchStateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/chat/threads/{thread_id}/resend":{"post":{"tags":["chat","chat"],"summary":"Resend Last Message","description":"Resend the last user message in a thread using agent (with tools support)","operationId":"resend_last_message_api_chat_threads__thread_id__resend_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/stats":{"get":{"tags":["dashboard"],"summary":"Get Dashboard Stats","description":"Get dashboard statistics for current user","operationId":"get_dashboard_stats_api_dashboard_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/trending":{"get":{"tags":["dashboard"],"summary":"Get Trending Companies","description":"Get trending companies for onboarding","operationId":"get_trending_companies_api_dashboard_trending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/onboarding-status":{"get":{"tags":["dashboard"],"summary":"Get Onboarding Status","description":"Check if user needs onboarding","operationId":"get_onboarding_status_api_dashboard_onboarding_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/onboarding-data":{"put":{"tags":["dashboard"],"summary":"Save Onboarding Preferences","description":"Save onboarding preferences (asset classes, event types)","operationId":"save_onboarding_preferences_api_dashboard_onboarding_data_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/post-reg-onboarding-complete":{"put":{"tags":["dashboard"],"summary":"Mark Post Reg Onboarding Complete","description":"Mark post-registration onboarding wizard as completed","operationId":"mark_post_reg_onboarding_complete_api_dashboard_post_reg_onboarding_complete_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/market-themes":{"get":{"tags":["dashboard"],"summary":"Get Market Themes","description":"Get active market themes for dashboard","operationId":"get_market_themes_api_dashboard_market_themes_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Maximum number of themes","default":5,"title":"Limit"},"description":"Maximum number of themes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/trending-tickers":{"get":{"tags":["dashboard"],"summary":"Get Trending Tickers","description":"Get trending tickers based on instruments linked to trending news.\nUses cached data (refreshed with market themes).","operationId":"get_trending_tickers_api_dashboard_trending_tickers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum number of tickers","default":10,"title":"Limit"},"description":"Maximum number of tickers"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/market-themes/{theme_id}/news":{"get":{"tags":["dashboard"],"summary":"Get Theme News","description":"Get news articles related to a specific market theme","operationId":"get_theme_news_api_dashboard_market_themes__theme_id__news_get","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","title":"Theme Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of news items","default":20,"title":"Limit"},"description":"Maximum number of news items"},{"name":"major_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return news from major sources","default":true,"title":"Major Only"},"description":"Only return news from major sources"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/settings":{"get":{"tags":["dashboard"],"summary":"Get Dashboard Settings","description":"Get user's dashboard settings","operationId":"get_dashboard_settings_api_dashboard_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["dashboard"],"summary":"Update Dashboard Settings","description":"Update user's dashboard settings","operationId":"update_dashboard_settings_api_dashboard_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/insights":{"get":{"tags":["dashboard"],"summary":"Get Dashboard Insights","description":"Get dashboard insights combining:\n- Active smart alerts\n- Trading ideas updates\n- News about portfolio positions","operationId":"get_dashboard_insights_api_dashboard_insights_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum number of insights","default":10,"title":"Limit"},"description":"Maximum number of insights"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/watchlist-attention":{"get":{"tags":["dashboard"],"summary":"Get Watchlist With Attention","description":"Get watchlist items with attention indicators:\n- Price moves >5%\n- Recent important news\n- Active alerts","operationId":"get_watchlist_with_attention_api_dashboard_watchlist_attention_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of items","default":10,"title":"Limit"},"description":"Maximum number of items"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/portfolio-holdings":{"get":{"tags":["dashboard"],"summary":"Get Portfolio Holdings With Attention","description":"Get portfolio positions with attention indicators for dashboard display.\n\nAttention indicators:\n- price_surge: >+5% daily change (green)\n- price_drop: <-5% daily change (red)\n- near_52w_high: within 5% of 52-week high\n- near_52w_low: within 5% of 52-week low\n- earnings_soon: earnings within 7 days\n- ex_dividend_soon: ex-dividend within 7 days\n- has_major_news: major news in last 24h\n- has_new_report: AI report in last 24h","operationId":"get_portfolio_holdings_with_attention_api_dashboard_portfolio_holdings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of positions","default":10,"title":"Limit"},"description":"Maximum number of positions"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/news":{"get":{"tags":["dashboard"],"summary":"Get Dashboard News","description":"Get news for dashboard display.\nPrioritizes news related to portfolio and watchlist instruments.\nOnly returns major source news by default.","operationId":"get_dashboard_news_api_dashboard_news_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of news items","default":10,"title":"Limit"},"description":"Maximum number of news items"},{"name":"fromWatchlist","in":"query","required":false,"schema":{"type":"boolean","description":"Prioritize news from portfolio/watchlist instruments","default":false,"title":"Fromwatchlist"},"description":"Prioritize news from portfolio/watchlist instruments"},{"name":"major_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return news from major sources","default":true,"title":"Major Only"},"description":"Only return news from major sources"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/dashboard/onboarding-alert-suggestions":{"post":{"tags":["dashboard"],"summary":"Generate Onboarding Alert Suggestions","description":"Generate personalized alert suggestions for onboarding.\nTakes user's watchlist tickers and generates 3 AI-powered alert suggestions\nbased on what's important to track TODAY.","operationId":"generate_onboarding_alert_suggestions_api_dashboard_onboarding_alert_suggestions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingAlertRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/financial-instruments":{"get":{"tags":["admin"],"summary":"Get All Financial Instruments","description":"Get all financial instruments with pagination (ADMIN and EDITOR can view)","operationId":"get_all_financial_instruments_api_admin_financial_instruments_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search term","default":"","title":"Search"},"description":"Search term"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["admin"],"summary":"Create Financial Instrument","description":"Create new financial instrument (ADMIN only)","operationId":"create_financial_instrument_api_admin_financial_instruments_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/financial-instruments/{instrument_id}":{"get":{"tags":["admin"],"summary":"Get Financial Instrument","description":"Get single financial instrument by ID (ADMIN only can view details)","operationId":"get_financial_instrument_api_admin_financial_instruments__instrument_id__get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["admin"],"summary":"Update Financial Instrument","description":"Update financial instrument (ADMIN only)","operationId":"update_financial_instrument_api_admin_financial_instruments__instrument_id__put","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["admin"],"summary":"Delete Financial Instrument","description":"Delete financial instrument (ADMIN only)","operationId":"delete_financial_instrument_api_admin_financial_instruments__instrument_id__delete","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/financial-instruments/{instrument_id}/concept-uri/recheck":{"post":{"tags":["admin"],"summary":"Recheck Instrument Concept Uri","description":"Re-resolve the Event Registry concept URI for an instrument and return the best\nauto-match plus ranked candidates, so the admin can verify or pick the correct one.\nDoes NOT write — the admin saves the chosen URI via the normal PUT (which marks it\nverified). ADMIN/EDITOR only.","operationId":"recheck_instrument_concept_uri_api_admin_financial_instruments__instrument_id__concept_uri_recheck_post","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/financial-instruments/concept-uri/bulk-verify":{"post":{"tags":["admin"],"summary":"Bulk Verify Concept Uris","description":"Mark concept_uri_verified=TRUE for many instruments at once (bulk approve from the\nadmin table checkboxes). Only rows that actually have a concept_uri are verified; ids\nwithout one are skipped. ADMIN/EDITOR only.","operationId":"bulk_verify_concept_uris_api_admin_financial_instruments_concept_uri_bulk_verify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/generate-initial-report/{ticker}":{"post":{"tags":["admin"],"summary":"Test Generate Initial Report","description":"Тестовая генерация Initial report для конкретного тикера","operationId":"test_generate_initial_report_api_admin_test_generate_initial_report__ticker__post","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/generate-weekly-update/{ticker}":{"post":{"tags":["admin"],"summary":"Test Generate Weekly Update","description":"Тестовая генерация Weekly Update для конкретного тикера","operationId":"test_generate_weekly_update_api_admin_test_generate_weekly_update__ticker__post","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/check-instruments-without-reports":{"get":{"tags":["admin"],"summary":"Test Check Instruments Without Reports","description":"Проверить какие инструменты не имеют отчётов","operationId":"test_check_instruments_without_reports_api_admin_test_check_instruments_without_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/check-instruments-with-old-reports":{"get":{"tags":["admin"],"summary":"Test Check Instruments With Old Reports","description":"Проверить какие инструменты имеют старые отчёты","operationId":"test_check_instruments_with_old_reports_api_admin_test_check_instruments_with_old_reports_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/fetch-news":{"post":{"tags":["admin"],"summary":"Test Fetch News For Ticker","description":"Тестовая выгрузка новостей для указанного тикера из выбранного источника\n\nПоддерживаемые источники:\n- **yahoo**: Новости из Yahoo Finance\n- **anthropic**: Новости через Anthropic AI  \n- **newsapi-ai**: Новости через NewsAPI.ai (сохраняется как 'newsapi-ai')\n\nEndpoint автоматически найдет инструмент по тикеру и попытается выгрузить новости\nиз указанного источника, затем сохранит их в базу данных.","operationId":"test_fetch_news_for_ticker_api_admin_test_fetch_news_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestNewsFetchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestNewsFetchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/generate-summaries":{"post":{"tags":["admin"],"summary":"Test Generate Ai Summaries","description":"Тестовый запуск генерации AI саммари для новостей без саммари","operationId":"test_generate_ai_summaries_api_admin_test_generate_summaries_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/check-news-without-summaries":{"get":{"tags":["admin"],"summary":"Check News Without Summaries","description":"Проверить сколько новостей без саммари","operationId":"check_news_without_summaries_api_admin_test_check_news_without_summaries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/generate-keywords":{"post":{"tags":["admin"],"summary":"Test Generate Instrument Keywords","description":"Generate AI-powered search keywords for instruments without keywords","operationId":"test_generate_instrument_keywords_api_admin_test_generate_keywords_post","parameters":[{"name":"batch_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of instruments to process","default":10,"title":"Batch Size"},"description":"Number of instruments to process"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/check-instruments-without-keywords":{"get":{"tags":["admin"],"summary":"Check Instruments Without Keywords","description":"Check how many instruments are missing search keywords","operationId":"check_instruments_without_keywords_api_admin_test_check_instruments_without_keywords_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users":{"get":{"tags":["admin"],"summary":"Get All Users","description":"Get all users with pagination and filters (EDITOR can view non-ADMIN users)","operationId":"get_all_users_api_admin_users_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search term","default":"","title":"Search"},"description":"Search term"},{"name":"role","in":"query","required":false,"schema":{"type":"string","description":"Filter by role","default":"","title":"Role"},"description":"Filter by role"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}":{"put":{"tags":["admin"],"summary":"Update User","description":"Update user settings (ADMIN only)","operationId":"update_user_api_admin_users__user_id__put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Update Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"get":{"tags":["admin"],"summary":"Get User Details","description":"Get detailed user information (EDITOR can view non-ADMIN users)","operationId":"get_user_details_api_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["admin"],"summary":"Delete User","description":"Delete user and all associated data (ADMIN only)\n\nThis is a destructive operation that will:\n1. Delete user from Supabase Auth\n2. Delete all user data from database (cascades automatically via foreign keys)\n\nThe following will be deleted automatically via CASCADE:\n- user profile (users table)\n- portfolios and positions\n- watchlists\n- smart alerts subscriptions\n- personal alerts subscriptions\n- trades\n- chat threads and messages\n- feedback\n- custom content (if owned)","operationId":"delete_user_api_admin_users__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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/news":{"get":{"tags":["admin"],"summary":"Get All News","description":"Get all news with pagination and filters","operationId":"get_all_news_api_admin_news_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search term","default":"","title":"Search"},"description":"Search term"},{"name":"source","in":"query","required":false,"schema":{"type":"string","description":"Filter by source","default":"","title":"Source"},"description":"Filter by source"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/news/search/semantic":{"get":{"tags":["admin"],"summary":"Search News Semantic","description":"Semantic search for news with rerank.\nUses vector embeddings + Voyage AI rerank for best relevance.","operationId":"search_news_semantic_api_admin_news_search_semantic_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days back to search","default":30,"title":"Days"},"description":"Days back to search"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/news/sources":{"get":{"tags":["admin"],"summary":"Get News Sources","description":"Get all unique news sources for filtering","operationId":"get_news_sources_api_admin_news_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/news/{news_id}":{"get":{"tags":["admin"],"summary":"Get News Details","description":"Get detailed news information","operationId":"get_news_details_api_admin_news__news_id__get","parameters":[{"name":"news_id","in":"path","required":true,"schema":{"type":"string","title":"News Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["admin"],"summary":"Update News","description":"Update news item","operationId":"update_news_api_admin_news__news_id__put","parameters":[{"name":"news_id","in":"path","required":true,"schema":{"type":"string","title":"News Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/market-themes/generate":{"post":{"tags":["admin"],"summary":"Generate Market Themes","description":"Manually trigger market themes generation","operationId":"generate_market_themes_api_admin_market_themes_generate_post","parameters":[{"name":"sync","in":"query","required":false,"schema":{"type":"boolean","description":"Run synchronously instead of via Celery","default":false,"title":"Sync"},"description":"Run synchronously instead of via Celery"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/market-themes":{"get":{"tags":["admin"],"summary":"Get All Market Themes","description":"Get all market themes for admin","operationId":"get_all_market_themes_api_admin_market_themes_get","parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"type":"string","description":"Filter by status: active, archived, or empty for all","default":"","title":"Status Filter"},"description":"Filter by status: active, archived, or empty for all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/market-themes/{theme_id}":{"delete":{"tags":["admin"],"summary":"Delete Market Theme","description":"Delete a market theme","operationId":"delete_market_theme_api_admin_market_themes__theme_id__delete","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/smart-alerts/process":{"post":{"tags":["admin"],"summary":"Process Smart Alerts","description":"Manually trigger smart alerts processing","operationId":"process_smart_alerts_api_admin_smart_alerts_process_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/personal-alerts/{alert_id}":{"get":{"tags":["admin"],"summary":"Get Personal Alert Info","description":"Get detailed info about a personal alert for debugging","operationId":"get_personal_alert_info_api_admin_personal_alerts__alert_id__get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/personal-alerts/check/{alert_id}":{"post":{"tags":["admin"],"summary":"Check Personal Alert","description":"Manually trigger check for a specific personal alert by ID with detailed diagnostics","operationId":"check_personal_alert_api_admin_personal_alerts_check__alert_id__post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/personal-alerts/dispatch":{"post":{"tags":["admin"],"summary":"Dispatch Personal Alerts","description":"Manually trigger dispatch of all personal alerts checks","operationId":"dispatch_personal_alerts_api_admin_personal_alerts_dispatch_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/invite-user":{"post":{"tags":["admin"],"summary":"Invite User","description":"Invite a new user with magic link (EDITOR can invite USER and EDITOR roles)","operationId":"invite_user_api_admin_invite_user_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/reset-user-password":{"post":{"tags":["admin"],"summary":"Reset User Password","description":"Send password reset email to registered user (EDITOR can reset passwords)","operationId":"reset_user_password_api_admin_reset_user_password_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Email Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/portfolio":{"post":{"tags":["admin"],"summary":"Add Portfolio Position","description":"Add portfolio position for user (EDITOR can manage portfolios)","operationId":"add_portfolio_position_api_admin_users__user_id__portfolio_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/PortfolioPositionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/portfolio/{position_id}":{"put":{"tags":["admin"],"summary":"Update Portfolio Position","description":"Update portfolio position for user (EDITOR can manage portfolios)","operationId":"update_portfolio_position_api_admin_users__user_id__portfolio__position_id__put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"position_id","in":"path","required":true,"schema":{"type":"string","title":"Position Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioPositionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["admin"],"summary":"Delete Portfolio Position","description":"Delete portfolio position for user (EDITOR can manage portfolios)","operationId":"delete_portfolio_position_api_admin_users__user_id__portfolio__position_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"position_id","in":"path","required":true,"schema":{"type":"string","title":"Position Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/chats":{"get":{"tags":["admin"],"summary":"Get User Chats","description":"Get user chat threads (EDITOR can view chats)","operationId":"get_user_chats_api_admin_users__user_id__chats_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/chats/{chat_id}":{"get":{"tags":["admin"],"summary":"Get Chat Details","description":"Get chat thread details (EDITOR can view chat content)","operationId":"get_chat_details_api_admin_users__user_id__chats__chat_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/portfolio/positions/{position_id}":{"delete":{"tags":["admin"],"summary":"Admin Delete Position","description":"Delete portfolio position for user (ADMIN only)","operationId":"admin_delete_position_api_admin_users__user_id__portfolio_positions__position_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"position_id","in":"path","required":true,"schema":{"type":"string","title":"Position Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["admin"],"summary":"Admin Update Position","description":"Update portfolio position for user (ADMIN only)","operationId":"admin_update_position_api_admin_users__user_id__portfolio_positions__position_id__put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"position_id","in":"path","required":true,"schema":{"type":"string","title":"Position Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Update Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/portfolio/positions":{"post":{"tags":["admin"],"summary":"Admin Add Position","description":"Add portfolio position for user (EDITOR can manage portfolios)","operationId":"admin_add_position_api_admin_users__user_id__portfolio_positions_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Position Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/watchlist/instruments":{"get":{"tags":["admin"],"summary":"Get User Watchlist Instruments","description":"Get full instrument details for user's watchlist","operationId":"get_user_watchlist_instruments_api_admin_users__user_id__watchlist_instruments_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/custom-content":{"get":{"tags":["admin"],"summary":"Get Custom Content List","description":"Get all custom content with pagination and filters (EDITOR access)","operationId":"get_custom_content_list_api_admin_custom_content_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search in title","default":"","title":"Search"},"description":"Search in title"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category","default":"","title":"Category"},"description":"Filter by category"},{"name":"published_only","in":"query","required":false,"schema":{"type":"boolean","description":"Show only published content","default":false,"title":"Published Only"},"description":"Show only published content"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["admin"],"summary":"Create Custom Content","description":"Create new custom content (EDITOR access)","operationId":"create_custom_content_api_admin_custom_content_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/custom-content/{content_id}":{"get":{"tags":["admin"],"summary":"Get Custom Content Details","description":"Get custom content details (EDITOR access)","operationId":"get_custom_content_details_api_admin_custom_content__content_id__get","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["admin"],"summary":"Update Custom Content","description":"Update custom content (EDITOR access)","operationId":"update_custom_content_api_admin_custom_content__content_id__put","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["admin"],"summary":"Delete Custom Content","description":"Delete custom content (EDITOR access)","operationId":"delete_custom_content_api_admin_custom_content__content_id__delete","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/custom-content/{content_id}/files":{"post":{"tags":["admin"],"summary":"Upload Custom Content Files","description":"Upload files for custom content (EDITOR access)","operationId":"upload_custom_content_files_api_admin_custom_content__content_id__files_post","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/custom-content/{content_id}/files/{file_id}":{"delete":{"tags":["admin"],"summary":"Delete Custom Content File","description":"Delete file from custom content (EDITOR access)","operationId":"delete_custom_content_file_api_admin_custom_content__content_id__files__file_id__delete","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}},{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/custom-content-categories":{"get":{"tags":["admin"],"summary":"Get Custom Content Categories","description":"Get available custom content categories (EDITOR access)","operationId":"get_custom_content_categories_api_admin_custom_content_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/api/settings":{"get":{"tags":["admin"],"summary":"Get Admin Settings","description":"Get admin settings (ADMIN access)","operationId":"get_admin_settings_api_admin_api_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["admin"],"summary":"Save Admin Settings","description":"Save admin settings (ADMIN access)","operationId":"save_admin_settings_api_admin_api_settings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/settings/bank-portfolio":{"get":{"tags":["admin"],"summary":"Get Bank Portfolio Settings","description":"Get bank portfolio settings (ADMIN only)","operationId":"get_bank_portfolio_settings_api_admin_settings_bank_portfolio_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["admin"],"summary":"Update Bank Portfolio Settings","description":"Update bank portfolio settings (ADMIN only)","operationId":"update_bank_portfolio_settings_api_admin_settings_bank_portfolio_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Settings Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/portfolios":{"get":{"tags":["admin"],"summary":"Get User Portfolios Admin","description":"Get all portfolios for a user (ADMIN only)","operationId":"get_user_portfolios_admin_api_admin_users__user_id__portfolios_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/users/{user_id}/portfolios/bank":{"post":{"tags":["admin"],"summary":"Create Bank Portfolio For User","description":"Create bank portfolio for specific user (ADMIN only)","operationId":"create_bank_portfolio_for_user_api_admin_users__user_id__portfolios_bank_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/portfolios/{portfolio_id}":{"put":{"tags":["admin"],"summary":"Update Portfolio Admin","description":"Update portfolio (ADMIN only)","operationId":"update_portfolio_admin_api_admin_portfolios__portfolio_id__put","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","title":"Portfolio Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Update Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/system-rules":{"get":{"tags":["admin"],"summary":"Get System Rules","description":"Get all system rules (ADMIN only)","operationId":"get_system_rules_api_admin_system_rules_get","parameters":[{"name":"rule_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rule type","title":"Rule Type"},"description":"Filter by rule type"},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Show only active rules","default":true,"title":"Active Only"},"description":"Show only active rules"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["admin"],"summary":"Create System Rule","description":"Create a new system rule (ADMIN only)","operationId":"create_system_rule_api_admin_system_rules_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemRuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/system-rules/types":{"get":{"tags":["admin"],"summary":"Get System Rule Types","description":"Get available system rule types (ADMIN only)","operationId":"get_system_rule_types_api_admin_system_rules_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/system-rules/{rule_id}":{"get":{"tags":["admin"],"summary":"Get System Rule","description":"Get a specific system rule (ADMIN only)","operationId":"get_system_rule_api_admin_system_rules__rule_id__get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["admin"],"summary":"Update System Rule","description":"Update a system rule (ADMIN only)","operationId":"update_system_rule_api_admin_system_rules__rule_id__put","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemRuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["admin"],"summary":"Delete System Rule","description":"Delete a system rule (ADMIN only)","operationId":"delete_system_rule_api_admin_system_rules__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/system-rules/{rule_id}/toggle":{"patch":{"tags":["admin"],"summary":"Toggle System Rule","description":"Toggle system rule active status (ADMIN only)","operationId":"toggle_system_rule_api_admin_system_rules__rule_id__toggle_patch","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Toggle Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/system-rules/preview/{rule_type}":{"get":{"tags":["admin"],"summary":"Preview Combined Prompt","description":"Preview combined system prompt for a rule type (ADMIN only)","operationId":"preview_combined_prompt_api_admin_system_rules_preview__rule_type__get","parameters":[{"name":"rule_type","in":"path","required":true,"schema":{"type":"string","title":"Rule Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/impersonate/{user_id}":{"post":{"tags":["admin"],"summary":"Impersonate User","description":"Generate impersonation link for a user (ADMIN only)","operationId":"impersonate_user_api_admin_impersonate__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/instruments/{ticker}/reload-prices":{"post":{"tags":["admin"],"summary":"Reload Instrument Prices","description":"Полная перезагрузка исторических цен для инструмента из Yahoo Finance.\n\nУдаляет все существующие исторические цены и загружает свежие данные\nс auto_adjust=True (цены уже скорректированы на сплиты).\n\n⚠️ WARNING: Используйте period=max чтобы не потерять историю!\nПри period=1y данные старше года будут удалены.\n\nИспользуйте если данные о ценах повреждены или некорректны.","operationId":"reload_instrument_prices_api_admin_instruments__ticker__reload_prices_post","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Period: 1mo, 3mo, 6mo, 1y, 2y, 5y, max. Default 'max' to preserve full history","default":"max","title":"Period"},"description":"Period: 1mo, 3mo, 6mo, 1y, 2y, 5y, max. Default 'max' to preserve full history"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/instruments/{ticker}/backfill-ohlc":{"post":{"tags":["admin"],"summary":"Backfill Instrument Ohlc","description":"Backfill open/high/low prices for existing historical_prices records\nwhere open_price IS NULL. Fetches full history from Yahoo Finance.","operationId":"backfill_instrument_ohlc_api_admin_instruments__ticker__backfill_ohlc_post","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/instruments/{ticker}/update-price":{"post":{"tags":["admin"],"summary":"Update Instrument Price","description":"Обновить текущую цену инструмента из Yahoo Finance.\nИспользует extended hours данные если доступны.","operationId":"update_instrument_price_api_admin_instruments__ticker__update_price_post","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/instruments/{ticker}/check-splits":{"post":{"tags":["admin"],"summary":"Check Instrument Splits","description":"Проверить инструмент на наличие сплитов и обработать их.","operationId":"check_instrument_splits_api_admin_instruments__ticker__check_splits_post","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/splits":{"get":{"tags":["admin"],"summary":"Get All Splits","description":"Получить список всех зарегистрированных сплитов.","operationId":"get_all_splits_api_admin_splits_get","parameters":[{"name":"processed","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by processed status","title":"Processed"},"description":"Filter by processed status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/email-templates":{"get":{"tags":["admin"],"summary":"Get Available Email Templates","description":"Get list of available email templates for testing.","operationId":"get_available_email_templates_api_admin_test_email_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/test/send-email":{"post":{"tags":["admin"],"summary":"Send Test Email","description":"Send a test email using specified template.\nOnly available for ADMIN users.","operationId":"send_test_email_api_admin_test_send_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/active-ideas":{"get":{"tags":["admin"],"summary":"Get Active Ideas For Agent","description":"Return active trading ideas for the agent tester dropdown.","operationId":"get_active_ideas_for_agent_api_admin_agent_active_ideas_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/test-run":{"post":{"tags":["admin"],"summary":"Run Agent Test","description":"Proxy a dry-run request to the agent service (SSE stream).","operationId":"run_agent_test_api_admin_agent_test_run_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/active-alerts":{"get":{"tags":["admin"],"summary":"Get Active Alerts For Agent","description":"Return active personal smart alerts for the agent tester dropdown.","operationId":"get_active_alerts_for_agent_api_admin_agent_active_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/test-alert-check":{"post":{"tags":["admin"],"summary":"Run Alert Agent Test","description":"Proxy a dry-run personal alert check to the agent service (SSE stream).","operationId":"run_alert_agent_test_api_admin_agent_test_alert_check_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/test-generate":{"post":{"tags":["admin"],"summary":"Run Generate Idea Test","description":"Proxy a trading idea generation request to the agent service (SSE stream).","operationId":"run_generate_idea_test_api_admin_agent_test_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/save-generated-idea":{"post":{"tags":["admin"],"summary":"Save Generated Idea","description":"Save a generated trading idea (from agent tester) to the database.","operationId":"save_generated_idea_api_admin_agent_save_generated_idea_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/generate-chat":{"post":{"tags":["admin"],"summary":"Run Generate Idea Chat","description":"Continue a chat with the idea generation agent via SSE stream.","operationId":"run_generate_idea_chat_api_admin_agent_generate_chat_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/chart-data":{"get":{"tags":["admin"],"summary":"Get Chart Data","description":"Return OHLCV price history for a ticker for charting in agent tester.","operationId":"get_chart_data_api_admin_agent_chart_data_get","parameters":[{"name":"ticker","in":"query","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":365,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/test-sessions":{"post":{"tags":["admin"],"summary":"Save Agent Test Session","description":"Save a new agent test session (generation result).","operationId":"save_agent_test_session_api_admin_agent_test_sessions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"get":{"tags":["admin"],"summary":"List Agent Test Sessions","description":"List recent agent test sessions.","operationId":"list_agent_test_sessions_api_admin_agent_test_sessions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/test-sessions/{session_id}/chat":{"post":{"tags":["admin"],"summary":"Append Chat Message","description":"Append a chat exchange to an existing test session.","operationId":"append_chat_message_api_admin_agent_test_sessions__session_id__chat_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/agent/test-sessions/{session_id}":{"get":{"tags":["admin"],"summary":"Get Agent Test Session","description":"Get full detail of a test session including generation result and chat.","operationId":"get_agent_test_session_api_admin_agent_test_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["admin"],"summary":"Update Agent Test Session","description":"Update notes or other fields of a test session.","operationId":"update_agent_test_session_api_admin_agent_test_sessions__session_id__patch","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/bot-chats":{"get":{"tags":["admin"],"summary":"Get Bot Chats","description":"List Telegram-bot conversations: one row per chat with counts and the last message.","operationId":"get_bot_chats_api_admin_bot_chats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/bot-chats/{chat_id}":{"get":{"tags":["admin"],"summary":"Get Bot Chat","description":"Full chronological transcript for one Telegram-bot chat.","operationId":"get_bot_chat_api_admin_bot_chats__chat_id__get","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/admin/bot-chats/{chat_id}/resend":{"post":{"tags":["admin"],"summary":"Resend Bot Chat","description":"Re-trigger the bot to regenerate & re-send its answer to the last user message in\nthis chat. The actual generation runs inside agent_service (identical to the normal\nbot flow); the answer is delivered to the user in Telegram.","operationId":"resend_bot_chat_api_admin_bot_chats__chat_id__resend_post","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/summary":{"get":{"tags":["portfolio"],"summary":"Get Portfolio Summary","description":"Get portfolio summary with aggregate metrics\n\nArgs:\n    portfolio_id: Optional portfolio ID filter. If None, returns summary for all positions.","operationId":"get_portfolio_summary_api_portfolio_summary_get","parameters":[{"name":"portfolio_id","in":"query","required":false,"schema":{"type":"string","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/positions":{"get":{"tags":["portfolio"],"summary":"Get Portfolio Positions","description":"Get all portfolio positions with calculated metrics\n\nArgs:\n    portfolio_id: Optional portfolio ID filter. If None, returns all positions.","operationId":"get_portfolio_positions_api_portfolio_positions_get","parameters":[{"name":"portfolio_id","in":"query","required":false,"schema":{"type":"string","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["portfolio"],"summary":"Add Portfolio Position","description":"Add a new portfolio position","operationId":"add_portfolio_position_api_portfolio_positions_post","parameters":[{"name":"merge_existing","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Merge Existing"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioPositionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/positions/grouped":{"get":{"tags":["portfolio"],"summary":"Get Grouped Portfolio Positions","description":"Get portfolio positions grouped by instrument type\n\nArgs:\n    portfolio_id: Optional portfolio ID filter. If None, returns all positions.","operationId":"get_grouped_portfolio_positions_api_portfolio_positions_grouped_get","parameters":[{"name":"portfolio_id","in":"query","required":false,"schema":{"type":"string","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/positions/aggregated":{"get":{"tags":["portfolio"],"summary":"Get Aggregated Portfolio Positions","description":"Get portfolio positions aggregated by ticker across all portfolios\n\nReturns positions grouped by ticker with portfolio breakdown","operationId":"get_aggregated_portfolio_positions_api_portfolio_positions_aggregated_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/positions/add":{"post":{"tags":["portfolio"],"summary":"Add Position By Identifier","description":"Add portfolio position by ticker or ISIN","operationId":"add_position_by_identifier_api_portfolio_positions_add_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioAddRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/positions/{position_id}":{"put":{"tags":["portfolio"],"summary":"Update Portfolio Position","description":"Update an existing portfolio position","operationId":"update_portfolio_position_api_portfolio_positions__position_id__put","parameters":[{"name":"position_id","in":"path","required":true,"schema":{"type":"string","title":"Position Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioPositionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["portfolio"],"summary":"Delete Portfolio Position","description":"Delete a portfolio position (soft-deletes all trades, removes from history)","operationId":"delete_portfolio_position_api_portfolio_positions__position_id__delete","parameters":[{"name":"position_id","in":"path","required":true,"schema":{"type":"string","title":"Position Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/positions/{position_id}/sell-all":{"post":{"tags":["portfolio"],"summary":"Sell All Position","description":"Sell entire position (creates sell trade, preserves history)","operationId":"sell_all_position_api_portfolio_positions__position_id__sell_all_post","parameters":[{"name":"position_id","in":"path","required":true,"schema":{"type":"string","title":"Position Id"}},{"name":"price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/positions/import":{"post":{"tags":["portfolio"],"summary":"Import Positions From Csv","description":"Import multiple portfolio positions from CSV","operationId":"import_positions_from_csv_api_portfolio_positions_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioCSVImportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/search/instrument":{"get":{"tags":["portfolio"],"summary":"Search Portfolio Instrument","description":"Search for financial instrument by ticker or ISIN for portfolio addition","operationId":"search_portfolio_instrument_api_portfolio_search_instrument_get","parameters":[{"name":"ticker","in":"query","required":false,"schema":{"type":"string","title":"Ticker"}},{"name":"isin","in":"query","required":false,"schema":{"type":"string","title":"Isin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/cash/movements":{"get":{"tags":["portfolio"],"summary":"List Cash Movements","description":"Manual deposits and withdrawals, newest first, plus the current derived cash.","operationId":"list_cash_movements_api_portfolio_cash_movements_get","parameters":[{"name":"portfolio_id","in":"query","required":false,"schema":{"type":"string","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["portfolio"],"summary":"Create Cash Movement","description":"Record a deposit or a withdrawal; history is rebuilt from that date onwards.","operationId":"create_cash_movement_api_portfolio_cash_movements_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolio/cash/movements/{movement_id}":{"delete":{"tags":["portfolio"],"summary":"Delete Cash Movement","operationId":"delete_cash_movement_api_portfolio_cash_movements__movement_id__delete","parameters":[{"name":"movement_id","in":"path","required":true,"schema":{"type":"string","title":"Movement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolios/":{"get":{"tags":["portfolios"],"summary":"Get User Portfolios","description":"Get all portfolios for current user\n\nArgs:\n    include_metrics: If True, include calculated metrics for each portfolio","operationId":"get_user_portfolios_api_portfolios__get","parameters":[{"name":"include_metrics","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Metrics"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["portfolios"],"summary":"Create Portfolio","description":"Create a new portfolio","operationId":"create_portfolio_api_portfolios__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolios/bank-settings":{"get":{"tags":["portfolios"],"summary":"Get Bank Portfolio Settings Public","description":"Get bank portfolio settings (public endpoint)","operationId":"get_bank_portfolio_settings_public_api_portfolios_bank_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolios/{portfolio_id}":{"get":{"tags":["portfolios"],"summary":"Get Portfolio","description":"Get portfolio details","operationId":"get_portfolio_api_portfolios__portfolio_id__get","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["portfolios"],"summary":"Update Portfolio","description":"Update portfolio details","operationId":"update_portfolio_api_portfolios__portfolio_id__put","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portfolio Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["portfolios"],"summary":"Delete Portfolio","description":"Delete a portfolio","operationId":"delete_portfolio_api_portfolios__portfolio_id__delete","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolios/{portfolio_id}/summary":{"get":{"tags":["portfolios"],"summary":"Get Portfolio Summary","description":"Get portfolio summary with metrics","operationId":"get_portfolio_summary_api_portfolios__portfolio_id__summary_get","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolios/{portfolio_id}/positions":{"get":{"tags":["portfolios"],"summary":"Get Portfolio Positions","description":"Get all positions in a portfolio","operationId":"get_portfolio_positions_api_portfolios__portfolio_id__positions_get","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/portfolios/all/summary":{"get":{"tags":["portfolios"],"summary":"Get All Portfolios Summary","description":"Get aggregate summary across all portfolios","operationId":"get_all_portfolios_summary_api_portfolios_all_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/orders/my":{"get":{"tags":["orders","orders"],"summary":"Get User Orders","description":"Get current user's orders with optional status filter","operationId":"get_user_orders_api_orders_my_get","parameters":[{"name":"order_status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/OrderStatus"},{"type":"null"}],"title":"Order Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/orders/":{"post":{"tags":["orders","orders"],"summary":"Create Order","description":"Create a new order","operationId":"create_order_api_orders__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/orders/check-position/{instrument_id}":{"get":{"tags":["orders","orders"],"summary":"Check User Position","description":"Check user's current position for an instrument in bank portfolio","operationId":"check_user_position_api_orders_check_position__instrument_id__get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/orders/admin/all":{"get":{"tags":["orders","orders"],"summary":"Get All Orders","description":"Get all orders (admin only)","operationId":"get_all_orders_api_orders_admin_all_get","parameters":[{"name":"order_status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/OrderStatus"},{"type":"null"}],"title":"Order Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/orders/admin/{order_id}":{"get":{"tags":["orders","orders"],"summary":"Get Order Details","description":"Get order details with comments (admin only)","operationId":"get_order_details_api_orders_admin__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["orders","orders"],"summary":"Update Order","description":"Update order status and/or add comment (admin only)","operationId":"update_order_api_orders_admin__order_id__put","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/orders/admin/{order_id}/comments/{comment_id}":{"put":{"tags":["orders","orders"],"summary":"Update Comment","description":"Update order comment (admin only, own comments only)","operationId":"update_comment_api_orders_admin__order_id__comments__comment_id__put","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}},{"name":"comment_text","in":"query","required":true,"schema":{"type":"string","description":"Updated comment text","title":"Comment Text"},"description":"Updated comment text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["orders","orders"],"summary":"Delete Comment","description":"Delete order comment (admin only, own comments only)","operationId":"delete_comment_api_orders_admin__order_id__comments__comment_id__delete","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/feedback/submit":{"post":{"tags":["feedback","feedback"],"summary":"Submit Feedback","description":"Создать новый отзыв пользователя","operationId":"submit_feedback_api_feedback_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/feedback/chat-message/{message_id}/rate":{"post":{"tags":["feedback","feedback"],"summary":"Rate Chat Message","description":"Оценить сообщение в чате (палец вверх/вниз)","operationId":"rate_chat_message_api_feedback_chat_message__message_id__rate_post","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageRating"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/feedback/my-feedbacks":{"get":{"tags":["feedback","feedback"],"summary":"Get User Feedbacks","description":"Получить отзывы текущего пользователя","operationId":"get_user_feedbacks_api_feedback_my_feedbacks_get","parameters":[{"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/FeedbackResponse"},"title":"Response Get User Feedbacks Api Feedback My Feedbacks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/feedback/admin/all-feedbacks":{"get":{"tags":["feedback","feedback"],"summary":"Get All Feedbacks","description":"Получить все отзывы (только для админов)","operationId":"get_all_feedbacks_api_feedback_admin_all_feedbacks_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"}},{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"rating_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/feedback/{feedback_id}":{"delete":{"tags":["feedback","feedback"],"summary":"Delete Feedback","description":"Удалить свой отзыв","operationId":"delete_feedback_api_feedback__feedback_id__delete","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/events":{"post":{"tags":["events"],"summary":"Track User Events","description":"Track server-side user events via PostHog\nFrontend $pageview events should be sent directly via PostHog JS SDK","operationId":"track_user_events_api_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserEventsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/custom-content/dashboard":{"get":{"tags":["custom-content"],"summary":"Get Custom Content For Dashboard","description":"Get recent custom content for dashboard display","operationId":"get_custom_content_for_dashboard_api_custom_content_dashboard_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/custom-content/categories":{"get":{"tags":["custom-content"],"summary":"Get Custom Content Categories","description":"Get available custom content categories","operationId":"get_custom_content_categories_api_custom_content_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/custom-content":{"get":{"tags":["custom-content"],"summary":"Get Published Custom Content","description":"Get published custom content list for public viewing","operationId":"get_published_custom_content_api_custom_content_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category","default":"","title":"Category"},"description":"Filter by category"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search in title","default":"","title":"Search"},"description":"Search in title"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/custom-content/{content_id}":{"get":{"tags":["custom-content"],"summary":"Get Custom Content Detail","description":"Get custom content detail for public viewing","operationId":"get_custom_content_detail_api_custom_content__content_id__get","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/files/custom-content/{content_id}/files/{file_id}":{"get":{"tags":["files"],"summary":"Download Custom Content File","description":"Download or view custom content file","operationId":"download_custom_content_file_api_files_custom_content__content_id__files__file_id__get","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}},{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","description":"Force download instead of inline display","default":false,"title":"Download"},"description":"Force download instead of inline display"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/files/custom-content/{content_id}/files/{file_id}/info":{"get":{"tags":["files"],"summary":"Get Custom Content File Info","description":"Get file information without downloading","operationId":"get_custom_content_file_info_api_files_custom_content__content_id__files__file_id__info_get","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}},{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/market-info":{"get":{"tags":["market-info"],"summary":"Get Market Info","description":"Get market info data for dashboard display\n\nArgs:\n    market_types: Optional comma-separated list of market types to filter by\n                 (US, EUROPE, ASIA, GB, RATES, COMMODITIES, CURRENCIES, CRYPTOCURRENCIES)\n\nReturns:\n    List of market info with current prices and changes","operationId":"get_market_info_api_market_info_get","parameters":[{"name":"market_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated market types filter","title":"Market Types"},"description":"Comma-separated market types filter"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MarketInfo"},"title":"Response Get Market Info Api Market Info Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/market-info/dashboard":{"get":{"tags":["market-info"],"summary":"Get Market Info For Dashboard","description":"Get market info specifically formatted for dashboard display\nReturns key market indicators in order for horizontal scrolling","operationId":"get_market_info_for_dashboard_api_market_info_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/trading-ideas":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get Trading Ideas","description":"Get list of trading ideas with optional filters","operationId":"get_trading_ideas_api_smart_alerts_trading_ideas_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: in_progress, completed","title":"Status"},"description":"Filter by status: in_progress, completed"},{"name":"instrument_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by instrument ID","title":"Instrument Id"},"description":"Filter by instrument ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["smart-alerts","trading-ideas"],"summary":"Create Trading Idea","description":"Create a trading idea (admin only)","operationId":"create_trading_idea_api_smart_alerts_trading_ideas_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Idea Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Trading Idea Api Smart Alerts Trading Ideas Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/trading-ideas/{idea_id}":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get Trading Idea","description":"Get trading idea by ID with full details","operationId":"get_trading_idea_api_smart_alerts_trading_ideas__idea_id__get","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Trading Idea Api Smart Alerts Trading Ideas  Idea Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["smart-alerts","trading-ideas"],"summary":"Update Trading Idea","description":"Update a trading idea (admin only)","operationId":"update_trading_idea_api_smart_alerts_trading_ideas__idea_id__patch","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Updates"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Trading Idea Api Smart Alerts Trading Ideas  Idea Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/trading-ideas/{idea_id}/history":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get Trading Idea History","description":"Get timeline/history for a trading idea","operationId":"get_trading_idea_history_api_smart_alerts_trading_ideas__idea_id__history_get","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Trading Idea History Api Smart Alerts Trading Ideas  Idea Id  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/trading-ideas/{idea_id}/complete":{"post":{"tags":["smart-alerts","trading-ideas"],"summary":"Complete Trading Idea","description":"Complete a trading idea (admin only)","operationId":"complete_trading_idea_api_smart_alerts_trading_ideas__idea_id__complete_post","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/subscriptions":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get User Subscriptions","description":"Get all trading idea subscriptions for current user","operationId":"get_user_subscriptions_api_smart_alerts_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get User Subscriptions Api Smart Alerts Subscriptions Get"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["smart-alerts","trading-ideas"],"summary":"Subscribe To Idea","description":"Subscribe to a trading idea for notifications\n\nOptional trade_data can be provided to record a buy trade:\n- portfolio_id: Portfolio to record trade in\n- quantity: Number of shares\n- price: Entry price (defaults to idea's entry_price)\n- trade_date: Date of trade (defaults to today)","operationId":"subscribe_to_idea_api_smart_alerts_subscriptions_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Subscribe To Idea Api Smart Alerts Subscriptions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/subscriptions/{idea_id}":{"delete":{"tags":["smart-alerts","trading-ideas"],"summary":"Unsubscribe From Idea","description":"Unsubscribe from a trading idea","operationId":"unsubscribe_from_idea_api_smart_alerts_subscriptions__idea_id__delete","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/subscriptions/{subscription_id}/exit-trade":{"post":{"tags":["smart-alerts","trading-ideas"],"summary":"Record Exit Trade","description":"Record an exit (sell) trade for a trading idea subscription\n\nUsed when idea is completed and user wants to record their sell trade.\n\nRequired:\n- portfolio_id: Portfolio to record trade in\n- quantity: Number of shares sold\n- price: Exit price\n\nOptional:\n- trade_date: Date of trade (defaults to today)","operationId":"record_exit_trade_api_smart_alerts_subscriptions__subscription_id__exit_trade_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Record Exit Trade Api Smart Alerts Subscriptions  Subscription Id  Exit Trade Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/subscriptions/{subscription_id}":{"patch":{"tags":["smart-alerts","trading-ideas"],"summary":"Update Subscription","description":"Update subscription notification preferences","operationId":"update_subscription_api_smart_alerts_subscriptions__subscription_id__patch","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Updates"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Subscription Api Smart Alerts Subscriptions  Subscription Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/price-alerts":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get User Price Alerts","description":"Get price alerts for current user","operationId":"get_user_price_alerts_api_smart_alerts_price_alerts_get","parameters":[{"name":"include_triggered","in":"query","required":false,"schema":{"type":"boolean","description":"Include triggered alerts","default":false,"title":"Include Triggered"},"description":"Include triggered alerts"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get User Price Alerts Api Smart Alerts Price Alerts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["smart-alerts","trading-ideas"],"summary":"Create Price Alert","description":"Create a price alert","operationId":"create_price_alert_api_smart_alerts_price_alerts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Price Alert Api Smart Alerts Price Alerts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/price-alerts/{alert_id}":{"delete":{"tags":["smart-alerts","trading-ideas"],"summary":"Delete Price Alert","description":"Delete a price alert","operationId":"delete_price_alert_api_smart_alerts_price_alerts__alert_id__delete","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["smart-alerts","trading-ideas"],"summary":"Update Price Alert","description":"Update a price alert","operationId":"update_price_alert_api_smart_alerts_price_alerts__alert_id__patch","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Updates"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Price Alert Api Smart Alerts Price Alerts  Alert Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/alerts":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get All User Alerts","description":"Get all alerts for current user:\n- Subscriptions to trading ideas\n- Price alerts","operationId":"get_all_user_alerts_api_smart_alerts_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get All User Alerts Api Smart Alerts Alerts Get"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/stats/active-count":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get Active Alerts Count","description":"Get count of active alerts for current user","operationId":"get_active_alerts_count_api_smart_alerts_stats_active_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Active Alerts Count Api Smart Alerts Stats Active Count Get"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/stats/hot-ideas":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get Hot Trading Ideas","description":"Get top trading ideas (in_progress with best progress)","operationId":"get_hot_trading_ideas_api_smart_alerts_stats_hot_ideas_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Hot Trading Ideas Api Smart Alerts Stats Hot Ideas Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/smart-alerts/trading-ideas/{idea_id}/events":{"get":{"tags":["smart-alerts","trading-ideas"],"summary":"Get Trading Idea Events","description":"Legacy: redirect to history endpoint","operationId":"get_trading_idea_events_api_smart_alerts_trading_ideas__idea_id__events_get","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea 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":{"type":"object","additionalProperties":true},"title":"Response Get Trading Idea Events Api Smart Alerts Trading Ideas  Idea Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/structure":{"post":{"tags":["personal-alerts","personal-alerts"],"summary":"Structure User Query Endpoint","description":"Structure user's natural language query into alert format (new multi-step UI).\n\nInput: {\"user_query\": \"track netflix warner deal\"}","operationId":"structure_user_query_endpoint_api_personal_alerts_structure_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Structure User Query Endpoint Api Personal Alerts Structure Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts":{"post":{"tags":["personal-alerts","personal-alerts"],"summary":"Create Personal Alert","description":"Create personal alert and automatically subscribe current user.\n\nProcess:\n1. AI automatically generates ai_instructions from event_description\n2. Creates personal_smart_alert with ai_instructions_version=1\n3. Automatically creates user_alert_subscription for current user\n\nReturns: {alert_id, subscription_id, ai_instructions}","operationId":"create_personal_alert_api_personal_alerts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAlertCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Personal Alert Api Personal Alerts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/test":{"post":{"tags":["personal-alerts","personal-alerts"],"summary":"Test Personal Alert","description":"Test alert before creation (Test Alert).\n\nProcess:\n1. Generates ai_instructions from event_description\n2. Collects current context\n3. AI analyzes: interpretation, current status, confidence\n\nSpam protection:\n- Result caching for 10 minutes (if data unchanged)\n- Rate limit: max 10-15 requests per hour per user\n\nReturns: {\n    interpretation: str,\n    current_status: str,\n    ai_instructions: Dict,\n    confidence: float,\n    warning: Optional[str]\n}","operationId":"test_personal_alert_api_personal_alerts_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAlertTestCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Test Personal Alert Api Personal Alerts Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/subscriptions":{"get":{"tags":["personal-alerts","personal-alerts"],"summary":"Get User Alert Subscriptions","description":"Get user's alert subscriptions.\n\nStatus options: 'active', 'paused', 'triggered', 'expired', 'archived', 'all'\n\nReturns: [{\n    subscription_id, alert_id, status, title, event_description,\n    instruments, trigger_count, last_triggered_at, created_at\n}]","operationId":"get_user_alert_subscriptions_api_personal_alerts_subscriptions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Status filter: active, paused, triggered, expired, archived, all","default":"active","title":"Status"},"description":"Status filter: active, paused, triggered, expired, archived, all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get User Alert Subscriptions Api Personal Alerts Subscriptions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/{alert_id}":{"get":{"tags":["personal-alerts","personal-alerts"],"summary":"Get Personal Alert","description":"Get alert details + trigger history.\nAvailable to creator or subscribers.","operationId":"get_personal_alert_api_personal_alerts__alert_id__get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Personal Alert Api Personal Alerts  Alert Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["personal-alerts","personal-alerts"],"summary":"Update Personal Alert","description":"Update alert (creator only).\nCan update: title, event_description, is_public.\n\nWhen title/event_description changes:\n- test_result_cache is invalidated\n- ai_instructions are regenerated\n- ai_instructions_version is incremented","operationId":"update_personal_alert_api_personal_alerts__alert_id__patch","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAlertUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Personal Alert Api Personal Alerts  Alert Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["personal-alerts","personal-alerts"],"summary":"Delete Personal Alert","description":"Delete alert (creator only).\nCascade deletes all subscriptions and triggers.","operationId":"delete_personal_alert_api_personal_alerts__alert_id__delete","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/{alert_id}/checks":{"get":{"tags":["personal-alerts","personal-alerts"],"summary":"Get Alert Checks","description":"Get check history for alert.\n\nBy default excludes INFO level (routine checks with no updates).\nInclude WARNING, TRIGGERED, EXPIRED, CANCELLED, ERROR levels.","operationId":"get_alert_checks_api_personal_alerts__alert_id__checks_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"include_info","in":"query","required":false,"schema":{"type":"boolean","description":"Include INFO level checks","default":false,"title":"Include Info"},"description":"Include INFO level checks"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Alert Checks Api Personal Alerts  Alert Id  Checks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/{alert_id}/triggers":{"get":{"tags":["personal-alerts","personal-alerts"],"summary":"Get Alert Triggers","description":"Alert trigger history (legacy, use /checks instead)","operationId":"get_alert_triggers_api_personal_alerts__alert_id__triggers_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Alert Triggers Api Personal Alerts  Alert Id  Triggers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/{alert_id}/subscribe":{"post":{"tags":["personal-alerts","personal-alerts"],"summary":"Subscribe To Alert","description":"Subscribe to public alert (for existing alert).\n\nUsed when user wants to subscribe to someone else's public alert.","operationId":"subscribe_to_alert_api_personal_alerts__alert_id__subscribe_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAlertSubscriptionSettings"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Subscribe To Alert Api Personal Alerts  Alert Id  Subscribe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/subscriptions/{subscription_id}/pause":{"post":{"tags":["personal-alerts","personal-alerts"],"summary":"Pause Subscription","description":"Pause subscription (without deleting)","operationId":"pause_subscription_api_personal_alerts_subscriptions__subscription_id__pause_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/subscriptions/{subscription_id}/resume":{"post":{"tags":["personal-alerts","personal-alerts"],"summary":"Resume Subscription","description":"Resume subscription","operationId":"resume_subscription_api_personal_alerts_subscriptions__subscription_id__resume_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/subscriptions/{subscription_id}":{"delete":{"tags":["personal-alerts","personal-alerts"],"summary":"Unsubscribe","description":"Unsubscribe from alert (delete subscription)","operationId":"unsubscribe_api_personal_alerts_subscriptions__subscription_id__delete","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"tags":["personal-alerts","personal-alerts"],"summary":"Update Subscription","description":"Update subscription settings.\nCan update: valid_until, trigger_once","operationId":"update_subscription_api_personal_alerts_subscriptions__subscription_id__patch","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAlertSubscriptionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Subscription Api Personal Alerts Subscriptions  Subscription Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/feedback/{notification_id}/{token}":{"get":{"tags":["personal-alerts","personal-alerts"],"summary":"Submit Feedback","description":"Process user feedback from email link.\n\nProcess:\n1. Verify token validity (HMAC signature)\n2. Get notification and user_id\n3. Save feedback to user_alert_notifications\n4. Show \"Thanks for feedback!\" page\n\nToken: HMAC(notification_id + user_id, SECRET_KEY)","operationId":"submit_feedback_api_personal_alerts_feedback__notification_id___token__get","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"type","in":"query","required":true,"schema":{"type":"string","pattern":"^(helpful|not_relevant|too_late|unclear)$","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Submit Feedback Api Personal Alerts Feedback  Notification Id   Token  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/personal-alerts/notifications/{notification_id}/feedback":{"post":{"tags":["personal-alerts","personal-alerts"],"summary":"Submit Detailed Feedback","description":"Submit detailed feedback (with comment).\nUsed from CapPilot UI.","operationId":"submit_detailed_feedback_api_personal_alerts_notifications__notification_id__feedback_post","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAlertFeedbackData"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/news":{"get":{"tags":["news"],"summary":"Get News","description":"Get parsed news with various filters.","operationId":"get_news_api_news_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source name","title":"Source"},"description":"Filter by source name"},{"name":"instrument_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by instrument ID","title":"Instrument Id"},"description":"Filter by instrument ID"},{"name":"theme_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by market theme ID","title":"Theme Id"},"description":"Filter by market theme ID"},{"name":"major_only","in":"query","required":false,"schema":{"type":"boolean","description":"Show only major sources","default":false,"title":"Major Only"},"description":"Show only major sources"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days back to fetch","default":30,"title":"Days"},"description":"Days back to fetch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/news/search":{"get":{"tags":["news"],"summary":"Search News Semantic","description":"Hybrid search: semantic (embeddings + rerank) with keyword fallback.","operationId":"search_news_semantic_api_news_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days back to search","default":30,"title":"Days"},"description":"Days back to search"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/news/sources":{"get":{"tags":["news"],"summary":"Get News Sources","description":"Get all unique news sources for filtering","operationId":"get_news_sources_api_news_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/news/{news_id}":{"get":{"tags":["news"],"summary":"Get News Detail","description":"Get detailed news item.\nSupports both full UUID and short ID (first 8 chars of UUID without hyphens).","operationId":"get_news_detail_api_news__news_id__get","parameters":[{"name":"news_id","in":"path","required":true,"schema":{"type":"string","title":"News Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/trades":{"post":{"tags":["trades","trades"],"summary":"Create Trade","description":"Create a new trade","operationId":"create_trade_api_trades_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"get":{"tags":["trades","trades"],"summary":"Get Trades","description":"Get user's trades with filters","operationId":"get_trades_api_trades_get","parameters":[{"name":"portfolio_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Portfolio Id"}},{"name":"instrument_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Instrument Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"trade_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(buy|sell)$"},{"type":"null"}],"title":"Trade Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/trades/{trade_id}":{"get":{"tags":["trades","trades"],"summary":"Get Trade","description":"Get a specific trade","operationId":"get_trade_api_trades__trade_id__get","parameters":[{"name":"trade_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trade Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"put":{"tags":["trades","trades"],"summary":"Update Trade","description":"Update a trade (only manual trades)","operationId":"update_trade_api_trades__trade_id__put","parameters":[{"name":"trade_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trade Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["trades","trades"],"summary":"Delete Trade","description":"Delete a trade (only manual trades)","operationId":"delete_trade_api_trades__trade_id__delete","parameters":[{"name":"trade_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trade Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/trades/lots/{portfolio_id}/{instrument_id}":{"get":{"tags":["trades","trades"],"summary":"Get Position Lots","description":"Get share lots for a position (FIFO breakdown)\n\nReturns individual buy lots that make up the current position,\nwith their purchase date, price, and current P&L.","operationId":"get_position_lots_api_trades_lots__portfolio_id___instrument_id__get","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portfolio Id"}},{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/trades/pnl/period":{"get":{"tags":["trades","trades"],"summary":"Get Pnl For Period","description":"Get P&L for a specific period","operationId":"get_pnl_for_period_api_trades_pnl_period_get","parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date","title":"Start Date"},"description":"Start date"},{"name":"end_date","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"End Date"},"description":"End date (default: today)"},{"name":"portfolio_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/trades/pnl/chart":{"get":{"tags":["trades","trades"],"summary":"Get Pnl Chart","description":"Get P&L chart data","operationId":"get_pnl_chart_api_trades_pnl_chart_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(1w|1m|3m|6m|1y|ytd|all)$","default":"1m","title":"Period"}},{"name":"portfolio_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/trades/pnl/instrument/{instrument_id}":{"get":{"tags":["trades","trades"],"summary":"Get Instrument Pnl","description":"Get P&L for a specific instrument","operationId":"get_instrument_pnl_api_trades_pnl_instrument__instrument_id__get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Instrument Id"}},{"name":"portfolio_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/trades/recalculate":{"post":{"tags":["trades","trades"],"summary":"Recalculate History","description":"Recalculate P&L history (creates/updates snapshots) - runs as background task","operationId":"recalculate_history_api_trades_recalculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecalculateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/instruments/by-ticker/{ticker}":{"get":{"tags":["public","public"],"summary":"Get Public Instrument By Ticker","description":"Get financial instrument by ticker (public, no auth required)","operationId":"get_public_instrument_by_ticker_api_public_instruments_by_ticker__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/instruments/{instrument_id}/details":{"get":{"tags":["public","public"],"summary":"Get Public Instrument Details","description":"Get detailed information about a financial instrument (public, no auth required)","operationId":"get_public_instrument_details_api_public_instruments__instrument_id__details_get","parameters":[{"name":"instrument_id","in":"path","required":true,"schema":{"type":"string","title":"Instrument Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/instruments/all":{"get":{"tags":["public","public"],"summary":"Get Public Instruments List","description":"Get all financial instruments for market overview (public, no auth required)","operationId":"get_public_instruments_list_api_public_instruments_all_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":24,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search term for instruments","default":"","title":"Search"},"description":"Search term for instruments"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Filter by instrument type","default":"","title":"Type"},"description":"Filter by instrument type"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort order: popular, name_asc, name_desc, change_1d_asc, change_1d_desc, ticker_asc, ticker_desc","default":"popular","title":"Sort"},"description":"Sort order: popular, name_asc, name_desc, change_1d_asc, change_1d_desc, ticker_asc, ticker_desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/instruments/types":{"get":{"tags":["public","public"],"summary":"Get Public Instrument Types","description":"Get all available instrument types (public, no auth required)","operationId":"get_public_instrument_types_api_public_instruments_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/trending-tickers":{"get":{"tags":["public","public"],"summary":"Get Public Trending Tickers","description":"Get trending tickers based on instruments linked to trending news (public, no auth required).\nUses cached data (refreshed with market themes).","operationId":"get_public_trending_tickers_api_public_trending_tickers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum number of tickers","default":10,"title":"Limit"},"description":"Maximum number of tickers"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/reports":{"get":{"tags":["public","public"],"summary":"Get Public Reports","description":"Get all reports (public, no auth required)","operationId":"get_public_reports_api_public_reports_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter reports by instrument ticker","title":"Ticker"},"description":"Filter reports by instrument ticker"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/reports/{report_id}":{"get":{"tags":["public","public"],"summary":"Get Public Report Detail","description":"Get detailed information about a specific report (public, no auth required).\nSupports both full UUID and short ID (first 8 chars of UUID without hyphens).","operationId":"get_public_report_detail_api_public_reports__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/news/{news_id}":{"get":{"tags":["public","public"],"summary":"Get Public News Detail","description":"Get detailed news item (public, no auth required).\nSupports both full UUID and short ID (first 8 chars of UUID without hyphens).","operationId":"get_public_news_detail_api_public_news__news_id__get","parameters":[{"name":"news_id","in":"path","required":true,"schema":{"type":"string","title":"News Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/trading-ideas":{"get":{"tags":["public","public"],"summary":"Get Public Trading Ideas","description":"Get list of trading ideas (public, no auth required)","operationId":"get_public_trading_ideas_api_public_trading_ideas_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: in_progress, completed","title":"Status"},"description":"Filter by status: in_progress, completed"},{"name":"instrument_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by financial instrument ID","title":"Instrument Id"},"description":"Filter by financial instrument ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/trading-ideas/{idea_id}":{"get":{"tags":["public","public"],"summary":"Get Public Trading Idea","description":"Get trading idea by ID with full details (public, no auth required)","operationId":"get_public_trading_idea_api_public_trading_ideas__idea_id__get","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/trading-ideas/{idea_id}/history":{"get":{"tags":["public","public"],"summary":"Get Public Trading Idea History","description":"Get timeline/history for a trading idea (public, no auth required)","operationId":"get_public_trading_idea_history_api_public_trading_ideas__idea_id__history_get","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/feedback/submit":{"post":{"tags":["public","public"],"summary":"Submit Public Feedback","description":"Accept feedback from guests (no auth required). Stored with user_id=NULL.","operationId":"submit_public_feedback_api_public_feedback_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicFeedbackCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/api-keys":{"get":{"tags":["api-keys","api-keys"],"summary":"List Api Keys","description":"List all active MCP API keys for the current user.","operationId":"list_api_keys_api_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Response List Api Keys Api Api Keys Get"}}}}},"security":[{"BearerAuth":[]}]},"post":{"tags":["api-keys","api-keys"],"summary":"Create Api Key","description":"Create a new MCP API key.\nThe raw key is returned **only once** — store it securely.\nMaximum 10 active keys per user.","operationId":"create_api_key_api_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/api-keys/{key_id}":{"delete":{"tags":["api-keys","api-keys"],"summary":"Revoke Api Key","description":"Revoke (soft-delete) an API key. The key will stop working immediately.","operationId":"revoke_api_key_api_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/":{"get":{"summary":"Root","description":"Host-routed landing: MarketCrew on marketcrew.ai, CapPilot elsewhere.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/preview/marketcrew":{"get":{"summary":"Preview Marketcrew","operationId":"preview_marketcrew_preview_marketcrew_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/marketcrew-logos":{"get":{"summary":"Preview Marketcrew Logos","operationId":"preview_marketcrew_logos_preview_marketcrew_logos_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/marketcrew-asset/{ticker}":{"get":{"summary":"Preview Marketcrew Asset","operationId":"preview_marketcrew_asset_preview_marketcrew_asset__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/mc/asset/{ticker}":{"get":{"summary":"Api Mc Asset","description":"Public JSON: the composed MarketCrew asset read (auth-exempt via /api/public/).\n`light=1` — без серии, новостей и ленты: столько нужно колонке контекста на /chat.","operationId":"api_mc_asset_api_public_mc_asset__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"light","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Light"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/connect/{client}":{"get":{"summary":"Connect Page","description":"Per-client connector instructions (MarketCrew).","operationId":"connect_page_connect__client__get","parameters":[{"name":"client","in":"path","required":true,"schema":{"type":"string","title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/preview/marketcrew-connect/{client}":{"get":{"summary":"Preview Marketcrew Connect","operationId":"preview_marketcrew_connect_preview_marketcrew_connect__client__get","parameters":[{"name":"client","in":"path","required":true,"schema":{"type":"string","title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/terminal":{"get":{"summary":"Terminal","description":"MarketCrew terminal (public). CapPilot host has no terminal → send home.","operationId":"terminal_terminal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/marketcrew-terminal":{"get":{"summary":"Preview Marketcrew Terminal","operationId":"preview_marketcrew_terminal_preview_marketcrew_terminal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/mc/series/{ticker}":{"get":{"summary":"Api Mc Series","description":"Light close series for terminal charts (auth-exempt via /api/public/).","operationId":"api_mc_series_api_public_mc_series__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/screener/":{"get":{"summary":"Mc Screener Index","description":"Голый /screener уходил в middleware и отдавал JSON «Missing authorization header».","operationId":"mc_screener_index_screener__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/screener":{"get":{"summary":"Mc Screener Index","description":"Голый /screener уходил в middleware и отдавал JSON «Missing authorization header».","operationId":"mc_screener_index_screener_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/screener/{slug}":{"get":{"summary":"Mc Screener","description":"Programmatic-SEO screeners (marketcrew only): fresh daily lists from the\nterminal snapshot, SSR with ItemList JSON-LD.","operationId":"mc_screener_screener__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/compare":{"get":{"summary":"Mc Compare Index","description":"Comparison hub: curated pair universe grouped by sector.","operationId":"mc_compare_index_compare_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/compare/{pair}":{"get":{"summary":"Mc Compare","description":"Head-to-head comparison page (curated universe only; reverse order 301s).","operationId":"mc_compare_compare__pair__get","parameters":[{"name":"pair","in":"path","required":true,"schema":{"type":"string","title":"Pair"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/ideas":{"get":{"summary":"Mc Ideas","description":"Live AI trading ideas + recent closed track record.","operationId":"mc_ideas_ideas_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api/public/mc/terminal-lite":{"get":{"summary":"Api Mc Terminal Lite","description":"Slim live snapshot for the terminal's background refresh: prices + 1d change per\nticker, pulse instruments and market state. Served from the same ~2 min cache.","operationId":"api_mc_terminal_lite_api_public_mc_terminal_lite_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/marketcrew-login":{"get":{"summary":"Preview Marketcrew Login","operationId":"preview_marketcrew_login_preview_marketcrew_login_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/marketcrew-register":{"get":{"summary":"Preview Marketcrew Register","operationId":"preview_marketcrew_register_preview_marketcrew_register_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/dashboard":{"get":{"summary":"Dashboard","description":"Serve main dashboard page (requires authentication). MarketCrew has no dashboard —\npost-login flows (incl. Google OAuth callback) bounce to /terminal there.","operationId":"dashboard_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/chat":{"get":{"summary":"Chat Page","description":"Serve chat page with V2 UI (MarketCrew-branded on marketcrew.ai).","operationId":"chat_page_chat_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/chats":{"get":{"summary":"Chats History Page","description":"Serve chat history page","operationId":"chats_history_page_chats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/login":{"get":{"summary":"Login Page","description":"Serve login page (MarketCrew-branded on marketcrew.ai).","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/register":{"get":{"summary":"Register Page","description":"Serve register page (MarketCrew-branded on marketcrew.ai).","operationId":"register_page_register_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/onboarding":{"get":{"summary":"Onboarding Page","description":"Serve onboarding page","operationId":"onboarding_page_onboarding_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/forgot-password":{"get":{"summary":"Forgot Password Page","description":"Serve forgot password page","operationId":"forgot_password_page_forgot_password_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/reset-password":{"get":{"summary":"Reset Password Page","description":"Serve reset password page","operationId":"reset_password_page_reset_password_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/debug-auth":{"get":{"summary":"Debug Auth Page","description":"Serve auth debug page","operationId":"debug_auth_page_debug_auth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/email-confirmation":{"get":{"summary":"Email Confirmation Page","description":"Serve email confirmation page","operationId":"email_confirmation_page_email_confirmation_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/auth/callback":{"get":{"summary":"Auth Callback Page","description":"Serve auth callback page for email confirmation","operationId":"auth_callback_page_auth_callback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/set-password":{"get":{"summary":"Set Password Page","description":"Serve set password page for invited users","operationId":"set_password_page_set_password_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/reports":{"get":{"summary":"Reports Page","description":"Serve reports page","operationId":"reports_page_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/reports":{"get":{"summary":"Reports Preview Page","description":"Serve isolated reports redesign preview page.","operationId":"reports_preview_page_preview_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/reports/{ticker}/{date}/{slug}":{"get":{"summary":"Report Detail Preview Page","description":"Serve isolated report detail redesign preview page.","operationId":"report_detail_preview_page_preview_reports__ticker___date___slug__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/news":{"get":{"summary":"News Page","description":"Serve news & analysis page","operationId":"news_page_news_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/news/{date}/{slug}":{"get":{"summary":"News Detail Page","description":"Serve news detail page with SEO-friendly URL","operationId":"news_detail_page_news__date___slug__get","parameters":[{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/reports/{ticker}/{date}/{slug}":{"get":{"summary":"Report Detail Page","description":"Serve report detail page with SEO meta tags","operationId":"report_detail_page_reports__ticker___date___slug__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/settings":{"get":{"summary":"Settings Page","description":"Serve settings page","operationId":"settings_page_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/.well-known/mcp-registry-auth":{"get":{"summary":"Mcp Registry Auth","description":"Official MCP Registry domain verification (HTTP method): serves the public key\nthat proves ownership of the ai.marketcrew namespace. Static and safe to serve.","operationId":"mcp_registry_auth__well_known_mcp_registry_auth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/.well-known/openai-apps-challenge":{"get":{"summary":"Openai Apps Challenge","description":"OpenAI apps-directory domain verification: returns the challenge token verbatim.\n\nThe token is issued during submission — set OPENAI_APPS_CHALLENGE_TOKEN in the\nenvironment (no redeploy of code needed), 404 until then.","operationId":"openai_apps_challenge__well_known_openai_apps_challenge_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/favicon.ico":{"get":{"summary":"Favicon","description":"Brand-aware root favicon — directory listings and crawlers fetch it from the\ndomain root (the MarketCrew connector's icon comes from here).","operationId":"favicon_favicon_ico_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/favicon.svg":{"get":{"summary":"Favicon","description":"Brand-aware root favicon — directory listings and crawlers fetch it from the\ndomain root (the MarketCrew connector's icon comes from here).","operationId":"favicon_favicon_svg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/terms":{"get":{"summary":"Terms Page","description":"Serve terms of service page","operationId":"terms_page_terms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/privacy":{"get":{"summary":"Privacy Page","description":"Serve privacy policy page","operationId":"privacy_page_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/preview/marketcrew-legal/{doc}":{"get":{"summary":"Preview Marketcrew Legal","operationId":"preview_marketcrew_legal_preview_marketcrew_legal__doc__get","parameters":[{"name":"doc","in":"path","required":true,"schema":{"type":"string","title":"Doc"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/refund":{"get":{"summary":"Refund Page","description":"Serve refund policy page","operationId":"refund_page_refund_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/market":{"get":{"summary":"Market Redirect","description":"Redirect /market to /markets","operationId":"market_redirect_market_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/markets":{"get":{"summary":"Markets Page","description":"Serve markets page (auth checked client-side via JS)","operationId":"markets_page_markets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/request-asset":{"get":{"summary":"Request Asset Page","description":"Serve request asset page","operationId":"request_asset_page_request_asset_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/markets/{instrument_type}":{"get":{"summary":"Markets By Type","description":"Serve markets page filtered by instrument type","operationId":"markets_by_type_markets__instrument_type__get","parameters":[{"name":"instrument_type","in":"path","required":true,"schema":{"type":"string","title":"Instrument Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/markets/{instrument_type}/{ticker}":{"get":{"summary":"Serve Instrument Page","description":"Serve instrument detail page (auth checked client-side via JS).","operationId":"serve_instrument_page_markets__instrument_type___ticker__get","parameters":[{"name":"instrument_type","in":"path","required":true,"schema":{"type":"string","title":"Instrument Type"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/404.html":{"get":{"summary":"Not Found Page","description":"Serve 404 error page","operationId":"not_found_page_404_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin":{"get":{"summary":"Admin Redirect","description":"Redirect admin root to users page","operationId":"admin_redirect_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/auth/impersonate-redirect":{"get":{"summary":"Impersonate Redirect Page","description":"Serve impersonation redirect page that clears tokens and redirects to magic link","operationId":"impersonate_redirect_page_auth_impersonate_redirect_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/users":{"get":{"summary":"Admin Users Page","description":"Serve admin users page (requires ADMIN or EDITOR role)","operationId":"admin_users_page_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/users/{user_id}":{"get":{"summary":"Admin User Detail Page","description":"Serve admin user detail page (requires ADMIN or EDITOR role)","operationId":"admin_user_detail_page_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/admin/custom-content":{"get":{"summary":"Admin Custom Content Page","description":"Admin custom content list page","operationId":"admin_custom_content_page_admin_custom_content_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/custom-content/new":{"get":{"summary":"Admin Custom Content New Page","description":"Admin new custom content page","operationId":"admin_custom_content_new_page_admin_custom_content_new_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/custom-content/{content_id}":{"get":{"summary":"Admin Custom Content Edit Page","description":"Admin edit custom content page","operationId":"admin_custom_content_edit_page_admin_custom_content__content_id__get","parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/admin/orders":{"get":{"summary":"Admin Orders Page","description":"Serve admin orders page (requires ADMIN or EDITOR role)","operationId":"admin_orders_page_admin_orders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/orders/{order_id}":{"get":{"summary":"Admin Order Detail Page","description":"Serve admin order detail page (requires ADMIN or EDITOR role)","operationId":"admin_order_detail_page_admin_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/admin/settings":{"get":{"summary":"Admin Settings Page","description":"Serve admin settings page (requires ADMIN role)","operationId":"admin_settings_page_admin_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/rules":{"get":{"summary":"Admin Rules Page","description":"Serve admin AI rules page (requires ADMIN role)","operationId":"admin_rules_page_admin_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/actions":{"get":{"summary":"Admin Actions Page","description":"Serve admin manual actions page (requires ADMIN or EDITOR role)","operationId":"admin_actions_page_admin_actions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/impersonate":{"get":{"summary":"Admin Impersonate Page","description":"Serve admin impersonate page (requires ADMIN role)","operationId":"admin_impersonate_page_admin_impersonate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/agent-tester":{"get":{"summary":"Admin Agent Tester Page","description":"Serve agent tester page (requires ADMIN role)","operationId":"admin_agent_tester_page_admin_agent_tester_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/bot-chats":{"get":{"summary":"Admin Bot Chats Page","description":"Serve Telegram-bot conversations list (requires ADMIN role)","operationId":"admin_bot_chats_page_admin_bot_chats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/admin/bot-chats/{chat_id}":{"get":{"summary":"Admin Bot Chat Detail Page","description":"Serve a single Telegram-bot conversation transcript (requires ADMIN role)","operationId":"admin_bot_chat_detail_page_admin_bot_chats__chat_id__get","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/admin/instruments":{"get":{"summary":"Admin Instruments Page","description":"Serve admin financial-instruments page: manage concept_uri for news routing\n(requires ADMIN or EDITOR role)","operationId":"admin_instruments_page_admin_instruments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/portfolio":{"get":{"summary":"Portfolio Page","operationId":"portfolio_page_portfolio_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/portfolio/all":{"get":{"summary":"Portfolio All Page","operationId":"portfolio_all_page_portfolio_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/portfolio/detail/{portfolio_id}":{"get":{"summary":"Portfolio Detail Page","operationId":"portfolio_detail_page_portfolio_detail__portfolio_id__get","parameters":[{"name":"portfolio_id","in":"path","required":true,"schema":{"type":"string","title":"Portfolio Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/portfolio/add":{"get":{"summary":"Portfolio Add Page","operationId":"portfolio_add_page_portfolio_add_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/trades":{"get":{"summary":"Trades Page","operationId":"trades_page_trades_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/smart-alerts":{"get":{"summary":"Smart Alerts Page","operationId":"smart_alerts_page_smart_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/trading-ideas":{"get":{"summary":"Trading Ideas Page","operationId":"trading_ideas_page_trading_ideas_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/trading-ideas/{idea_id}":{"get":{"summary":"Trading Idea Detail Page","description":"Serve trading idea detail page with SEO meta tags","operationId":"trading_idea_detail_page_trading_ideas__idea_id__get","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"string","title":"Idea Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/orders":{"get":{"summary":"Orders Page","description":"Serve orders page","operationId":"orders_page_orders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/api":{"get":{"summary":"Api Root","description":"API root endpoint","operationId":"api_root_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","description":"Serve robots.txt for SEO - different for bank subdomain","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"llms.txt — a plain-language site guide for AI crawlers/agents (marketcrew only).","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/sitemap.xml":{"get":{"summary":"Sitemap Xml","description":"Generate dynamic sitemap.xml for SEO","operationId":"sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}},"/swagger":{"get":{"summary":"Custom Swagger Ui","description":"Custom Swagger UI with auto-authentication","operationId":"custom_swagger_ui_swagger_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"BearerAuth":[]}]}}},"components":{"schemas":{"APIResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}},"type":"object","required":["success","message"],"title":"APIResponse","description":"Generic API response model"},"AddInstrumentRequest":{"properties":{"instrument_id":{"type":"string","title":"Instrument Id","description":"UUID of the financial instrument"}},"type":"object","required":["instrument_id"],"title":"AddInstrumentRequest","description":"Request model for adding an instrument to thread context"},"AdminSettingsRequest":{"properties":{"notification_emails":{"items":{"type":"string","format":"email"},"type":"array","title":"Notification Emails","default":[]}},"type":"object","title":"AdminSettingsRequest"},"ApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"tier":{"type":"string","title":"Tier"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"requests_remaining_today":{"type":"integer","title":"Requests Remaining Today"}},"type":"object","required":["id","name","tier","is_active","created_at","last_used_at","requests_remaining_today"],"title":"ApiKeyResponse"},"ChatMessageRating":{"properties":{"rating":{"type":"string","pattern":"^(like|dislike)$","title":"Rating","description":"Оценка сообщения"}},"type":"object","required":["rating"],"title":"ChatMessageRating"},"CheckEmailRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"CheckEmailRequest","description":"Request model for checking if email exists"},"CheckEmailResponse":{"properties":{"exists":{"type":"boolean","title":"Exists"},"is_registered":{"type":"boolean","title":"Is Registered"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["exists","is_registered"],"title":"CheckEmailResponse","description":"Response model for email check"},"CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name","default":"My API Key"}},"type":"object","title":"CreateKeyRequest"},"CreateThreadRequest":{"properties":{"first_message":{"type":"string","maxLength":10000,"minLength":1,"title":"First Message","description":"First message to start the thread"},"instrument_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Instrument Ids","description":"List of financial instrument IDs to add to thread context","default":[]},"web_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Web Search Enabled","description":"Enable web search for this thread","default":false}},"type":"object","required":["first_message"],"title":"CreateThreadRequest","description":"Request model for creating a new chat thread"},"CreatedKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"tier":{"type":"string","title":"Tier"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"requests_remaining_today":{"type":"integer","title":"Requests Remaining Today"},"raw_key":{"type":"string","title":"Raw Key"}},"type":"object","required":["id","name","tier","is_active","created_at","last_used_at","requests_remaining_today","raw_key"],"title":"CreatedKeyResponse"},"DashboardSettingsUpdate":{"properties":{"blocks_order":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Blocks Order"},"hidden_blocks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Hidden Blocks"},"preferred_market_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Market Category"}},"type":"object","title":"DashboardSettingsUpdate","description":"Model for updating dashboard settings"},"FeedbackCreate":{"properties":{"feedback_message":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Feedback Message","description":"Текст отзыва"},"feedback_rating_type":{"type":"string","pattern":"^(like|dislike|neutral|idea)$","title":"Feedback Rating Type","description":"Тип отзыва"},"linked_entity_type":{"type":"string","pattern":"^(report|chat_message|instrument|general)$","title":"Linked Entity Type","description":"Тип связанной сущности"},"linked_entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linked Entity Id","description":"ID связанной сущности"}},"type":"object","required":["feedback_rating_type","linked_entity_type"],"title":"FeedbackCreate"},"FeedbackResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"datetime":{"type":"string","format":"date-time","title":"Datetime"},"feedback_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feedback Message"},"feedback_rating_type":{"type":"string","title":"Feedback Rating Type"},"linked_entity_type":{"type":"string","title":"Linked Entity Type"},"linked_entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linked Entity Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","datetime","feedback_message","feedback_rating_type","linked_entity_type","linked_entity_id","created_at"],"title":"FeedbackResponse"},"ForgotPasswordRequest":{"properties":{"cf-turnstile-response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cf-Turnstile-Response","description":"Cloudflare Turnstile token, verified server-side before the request is honored"},"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest","description":"Forgot password request model"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InviteUserRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"InviteUserRequest"},"MarketInfo":{"properties":{"market_id":{"type":"string","title":"Market Id"},"market_type":{"$ref":"#/components/schemas/MarketInfoType"},"ticker":{"type":"string","title":"Ticker"},"display_name":{"type":"string","title":"Display Name"},"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price"},"current_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Change Percent"},"id":{"type":"string","format":"uuid","title":"Id"},"price_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Price Updated At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["market_id","market_type","ticker","display_name","id","created_at","updated_at"],"title":"MarketInfo"},"MarketInfoType":{"type":"string","enum":["US","EUROPE","ASIA","GB","RATES","COMMODITIES","CURRENCIES","CRYPTOCURRENCIES"],"title":"MarketInfoType"},"NewsSource":{"type":"string","enum":["yahoo","anthropic","newsapi-ai"],"title":"NewsSource","description":"News source types for test fetch"},"OnboardingAlertRequest":{"properties":{"tickers":{"items":{"type":"string"},"type":"array","title":"Tickers"},"preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preferences"}},"type":"object","required":["tickers"],"title":"OnboardingAlertRequest","description":"Request model for generating onboarding alert suggestions"},"OrderCreate":{"properties":{"financial_instrument_id":{"type":"string","format":"uuid","title":"Financial Instrument Id"},"order_type":{"$ref":"#/components/schemas/OrderType"},"execution_type":{"$ref":"#/components/schemas/OrderExecution","default":"market"},"quantity":{"type":"number","exclusiveMinimum":0.0,"title":"Quantity","description":"Number of shares/units"},"price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Price","description":"Target price (optional for market orders)"},"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until","description":"Order expiration date (null for GTC - Good Till Cancelled)"}},"type":"object","required":["financial_instrument_id","order_type","quantity"],"title":"OrderCreate","description":"Order creation model"},"OrderExecution":{"type":"string","enum":["market","limit"],"title":"OrderExecution","description":"Order execution types"},"OrderStatus":{"type":"string","enum":["pending","in_progress","filled","cancelled"],"title":"OrderStatus","description":"Order status types"},"OrderType":{"type":"string","enum":["buy","sell"],"title":"OrderType","description":"Order types"},"OrderUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/OrderStatus"},{"type":"null"}]},"admin_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Comment"},"execution_type":{"anyOf":[{"$ref":"#/components/schemas/OrderExecution"},{"type":"null"}]},"quantity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quantity"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until"},"execution_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Execution Date","description":"Date when order was executed (defaults to today)"}},"type":"object","title":"OrderUpdate","description":"Order update model (admin only)"},"PersonalAlertCreate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"event_description":{"type":"string","minLength":20,"title":"Event Description"},"instruments_context":{"additionalProperties":true,"type":"object","title":"Instruments Context"},"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until"},"trigger_once":{"type":"boolean","title":"Trigger Once","default":false},"is_public":{"type":"boolean","title":"Is Public","default":false},"chat_thread_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Chat Thread Id"}},"type":"object","required":["event_description","instruments_context"],"title":"PersonalAlertCreate","description":"Create personal alert"},"PersonalAlertFeedbackData":{"properties":{"type":{"$ref":"#/components/schemas/PersonalAlertFeedbackType"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","required":["type"],"title":"PersonalAlertFeedbackData","description":"Detailed user feedback"},"PersonalAlertFeedbackType":{"type":"string","enum":["helpful","not_relevant","too_late","unclear"],"title":"PersonalAlertFeedbackType","description":"User feedback types"},"PersonalAlertSubscriptionSettings":{"properties":{"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until"},"trigger_once":{"type":"boolean","title":"Trigger Once","default":false}},"type":"object","title":"PersonalAlertSubscriptionSettings","description":"Subscription settings on creation"},"PersonalAlertSubscriptionUpdate":{"properties":{"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until"},"trigger_once":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trigger Once"}},"type":"object","title":"PersonalAlertSubscriptionUpdate","description":"Update subscription"},"PersonalAlertTestCreate":{"properties":{"title":{"type":"string","maxLength":200,"title":"Title"},"event_description":{"type":"string","minLength":20,"title":"Event Description"},"instruments_context":{"additionalProperties":true,"type":"object","title":"Instruments Context"}},"type":"object","required":["title","event_description","instruments_context"],"title":"PersonalAlertTestCreate","description":"Test alert before creation"},"PersonalAlertUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"event_description":{"anyOf":[{"type":"string","minLength":20},{"type":"null"}],"title":"Event Description"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"}},"type":"object","title":"PersonalAlertUpdate","description":"Update alert (creator only)"},"PortfolioAddRequest":{"properties":{"portfolio_id":{"type":"string","format":"uuid","title":"Portfolio Id"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"},"isin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Isin"},"cost_price":{"type":"number","exclusiveMinimum":0.0,"title":"Cost Price"},"quantity":{"type":"number","exclusiveMinimum":0.0,"title":"Quantity"},"purchase_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Purchase Date","description":"Date when position was acquired (defaults to today)"}},"type":"object","required":["portfolio_id","cost_price","quantity"],"title":"PortfolioAddRequest","description":"Request to add position by ticker or ISIN"},"PortfolioCSVImportRequest":{"properties":{"portfolio_id":{"type":"string","format":"uuid","title":"Portfolio Id"},"csv_data":{"type":"string","title":"Csv Data","description":"CSV content as string"}},"type":"object","required":["portfolio_id","csv_data"],"title":"PortfolioCSVImportRequest","description":"Request for CSV import of portfolio positions"},"PortfolioCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"PortfolioCreate","description":"Portfolio creation model"},"PortfolioPositionCreate":{"properties":{"financial_instrument_id":{"type":"string","format":"uuid","title":"Financial Instrument Id"},"portfolio_id":{"type":"string","format":"uuid","title":"Portfolio Id"},"cost_price":{"type":"number","exclusiveMinimum":0.0,"title":"Cost Price","description":"Price at which the position was acquired"},"quantity":{"type":"number","exclusiveMinimum":0.0,"title":"Quantity","description":"Number of shares/units owned"},"purchase_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Purchase Date","description":"Date when position was acquired (defaults to today)"}},"type":"object","required":["financial_instrument_id","portfolio_id","cost_price","quantity"],"title":"PortfolioPositionCreate","description":"Portfolio position creation model"},"PortfolioPositionRequest":{"properties":{"financial_instrument_id":{"type":"string","title":"Financial Instrument Id"},"quantity":{"type":"number","title":"Quantity"},"average_price":{"type":"number","title":"Average Price"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["financial_instrument_id","quantity","average_price"],"title":"PortfolioPositionRequest"},"PortfolioPositionUpdate":{"properties":{"cost_price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Cost Price"},"quantity":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Quantity"}},"type":"object","title":"PortfolioPositionUpdate","description":"Portfolio position update model"},"PortfolioUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"}},"type":"object","title":"PortfolioUpdate","description":"Portfolio update model"},"PublicFeedbackCreate":{"properties":{"feedback_rating_type":{"type":"string","pattern":"^(like|dislike|neutral|idea)$","title":"Feedback Rating Type"},"feedback_message":{"type":"string","maxLength":2000,"minLength":1,"title":"Feedback Message"},"linked_entity_type":{"anyOf":[{"type":"string","pattern":"^(report|chat_message|instrument|general)$"},{"type":"null"}],"title":"Linked Entity Type"},"linked_entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linked Entity Id"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"}},"type":"object","required":["feedback_rating_type","feedback_message"],"title":"PublicFeedbackCreate"},"RecalculateRequest":{"properties":{"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"},"portfolio_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Portfolio Id"}},"type":"object","title":"RecalculateRequest","description":"Request to recalculate P&L history"},"RefreshTokenRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshTokenRequest","description":"Refresh token request model"},"ResendMessageRequest":{"properties":{"instrument_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Instrument Ids","description":"Optional instrument IDs for context"},"portfolio_context_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Portfolio Context Enabled","description":"Enable portfolio context for resend","default":false},"web_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Web Search Enabled","description":"Enable web search for resend","default":false},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"AI model to use"}},"type":"object","title":"ResendMessageRequest","description":"Request model for resending last message"},"ResendVerificationRequest":{"properties":{"cf-turnstile-response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cf-Turnstile-Response","description":"Cloudflare Turnstile token, verified server-side before the request is honored"},"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendVerificationRequest","description":"Resend verification code request model"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest","description":"Reset password request model"},"SendMessageRequest":{"properties":{"message":{"type":"string","maxLength":10000,"minLength":1,"title":"Message","description":"Message content"},"web_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Web Search Enabled","description":"Enable web search for this message","default":false},"portfolio_context_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Portfolio Context Enabled","description":"Enable portfolio context for this message","default":false},"instrument_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Instrument Ids","description":"List of current instrument IDs in context","default":[]},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"AI model to use (e.g., claude-sonnet-5 or gemini-3-pro)"}},"type":"object","required":["message"],"title":"SendMessageRequest","description":"Request model for sending a message to a thread"},"SystemRuleCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"rule_type":{"$ref":"#/components/schemas/SystemRuleType"},"content":{"type":"string","maxLength":10000,"minLength":1,"title":"Content"},"is_active":{"type":"boolean","title":"Is Active","default":true},"priority":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Priority","description":"Lower number = higher priority","default":0}},"type":"object","required":["name","rule_type","content"],"title":"SystemRuleCreate","description":"System rule creation model"},"SystemRuleType":{"type":"string","enum":["global","chat","financial_report","news_analysis","news_summary"],"title":"SystemRuleType","description":"System rule types for AI instructions"},"SystemRuleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"rule_type":{"anyOf":[{"$ref":"#/components/schemas/SystemRuleType"},{"type":"null"}]},"content":{"anyOf":[{"type":"string","maxLength":10000,"minLength":1},{"type":"null"}],"title":"Content"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"priority":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":0.0},{"type":"null"}],"title":"Priority"}},"type":"object","title":"SystemRuleUpdate","description":"System rule update model"},"TestEmailRequest":{"properties":{"recipient_email":{"type":"string","format":"email","title":"Recipient Email"},"template":{"type":"string","title":"Template"},"custom_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Data"},"role":{"type":"string","title":"Role","default":"USER"}},"type":"object","required":["recipient_email","template"],"title":"TestEmailRequest","description":"Request model for sending test emails"},"TestNewsFetchRequest":{"properties":{"ticker":{"type":"string","maxLength":10,"minLength":1,"title":"Ticker","description":"Stock ticker symbol (e.g., AAPL, MSFT)"},"source":{"$ref":"#/components/schemas/NewsSource","description":"News source to fetch from"}},"type":"object","required":["ticker","source"],"title":"TestNewsFetchRequest","description":"Request model for test news fetch"},"TestNewsFetchResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"ticker":{"type":"string","title":"Ticker"},"source":{"$ref":"#/components/schemas/NewsSource"},"news_found":{"type":"integer","title":"News Found"},"news_saved":{"type":"integer","title":"News Saved"},"news_items":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"News Items"},"instrument_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instrument Id"},"errors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Errors"}},"type":"object","required":["success","message","ticker","source","news_found","news_saved"],"title":"TestNewsFetchResponse","description":"Response model for test news fetch"},"TradeCreate":{"properties":{"portfolio_id":{"type":"string","format":"uuid","title":"Portfolio Id"},"financial_instrument_id":{"type":"string","format":"uuid","title":"Financial Instrument Id"},"trade_type":{"$ref":"#/components/schemas/TradeType"},"quantity":{"type":"number","exclusiveMinimum":0.0,"title":"Quantity"},"price":{"type":"number","exclusiveMinimum":0.0,"title":"Price"},"trade_date":{"type":"string","format":"date","title":"Trade Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"source":{"$ref":"#/components/schemas/TradeSource","default":"manual"},"source_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Id"}},"type":"object","required":["portfolio_id","financial_instrument_id","trade_type","quantity","price","trade_date"],"title":"TradeCreate","description":"Trade creation model"},"TradeSource":{"type":"string","enum":["manual","order","smart_alert","migration"],"title":"TradeSource","description":"Trade source types"},"TradeType":{"type":"string","enum":["buy","sell"],"title":"TradeType","description":"Trade types"},"TradeUpdate":{"properties":{"quantity":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Quantity"},"price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Price"},"trade_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Trade Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"TradeUpdate","description":"Trade update model (only manual trades can be updated)"},"UpdateTitleRequest":{"properties":{"title":{"type":"string","maxLength":100,"minLength":1,"title":"Title","description":"New thread title"}},"type":"object","required":["title"],"title":"UpdateTitleRequest","description":"Request model for updating thread title"},"UserCreate":{"properties":{"cf-turnstile-response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cf-Turnstile-Response","description":"Cloudflare Turnstile token, verified server-side before the request is honored"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"onboarding_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Onboarding Data"},"pending_alert":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pending Alert"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"Honeypot field"}},"type":"object","required":["email","password"],"title":"UserCreate","description":"User creation model"},"UserEventData":{"properties":{"type":{"type":"string","title":"Type"},"data":{"additionalProperties":true,"type":"object","title":"Data"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["type","data","timestamp"],"title":"UserEventData","description":"Single user event data"},"UserEventsRequest":{"properties":{"events":{"items":{"$ref":"#/components/schemas/UserEventData"},"type":"array","title":"Events"}},"type":"object","required":["events"],"title":"UserEventsRequest","description":"Request to track multiple user events"},"UserLogin":{"properties":{"cf-turnstile-response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cf-Turnstile-Response","description":"Cloudflare Turnstile token, verified server-side before the request is honored"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"Honeypot field"}},"type":"object","required":["email","password"],"title":"UserLogin","description":"User login model"},"UserNotificationSettingsUpdate":{"properties":{"email_notifications_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Notifications Enabled"},"notification_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification Frequency"},"minimum_change_threshold_1d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum Change Threshold 1D"},"minimum_change_threshold_5d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum Change Threshold 5D"},"minimum_change_threshold_1m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum Change Threshold 1M"},"minimum_change_threshold_6m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum Change Threshold 6M"}},"type":"object","title":"UserNotificationSettingsUpdate"},"UserWatchlistCreate":{"properties":{"name":{"type":"string","title":"Name","default":"Мой список"},"financial_instrument_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Financial Instrument Ids"},"status":{"$ref":"#/components/schemas/WatchlistStatus","default":"active"}},"type":"object","title":"UserWatchlistCreate","description":"User watchlist creation model"},"UserWatchlistUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"financial_instrument_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Financial Instrument Ids"},"status":{"anyOf":[{"$ref":"#/components/schemas/WatchlistStatus"},{"type":"null"}]}},"type":"object","title":"UserWatchlistUpdate","description":"User watchlist update model"},"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"},"VerifyEmailRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code","description":"6-digit verification code"}},"type":"object","required":["email","code"],"title":"VerifyEmailRequest","description":"Email verification request model"},"WatchlistStatus":{"type":"string","enum":["active","paused","archived"],"title":"WatchlistStatus","description":"Watchlist status types"},"WebSearchStateRequest":{"properties":{"web_search_enabled":{"type":"boolean","title":"Web Search Enabled","description":"Enable or disable web search for thread"}},"type":"object","required":["web_search_enabled"],"title":"WebSearchStateRequest","description":"Request model for updating web search state"}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Enter your Supabase access token (без 'Bearer' префикса)"}}}}