{"openapi":"3.1.0","info":{"title":"SigVest API","version":"1.0.0"},"paths":{"/api/prd/scenarios":{"get":{"tags":["PRD Scenarios"],"summary":"Get All Scenarios","description":"GET /api/prd/scenarios\nFetch all 12 PRD scenarios from database","operationId":"get_all_scenarios_api_prd_scenarios_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/prd/scenarios/{scenario_id}":{"get":{"tags":["PRD Scenarios"],"summary":"Get Scenario Details","description":"GET /api/prd/scenarios/{scenario_id}\nGet details for a specific scenario from database","operationId":"get_scenario_details_api_prd_scenarios__scenario_id__get","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prd/scenarios/{scenario_id}/execute":{"post":{"tags":["PRD Scenarios"],"summary":"Execute Scenario","description":"POST /api/prd/scenarios/{scenario_id}/execute\nExecute a PRD scenario with user's portfolio\n\nRequires: Active subscription or trial","operationId":"execute_scenario_api_prd_scenarios__scenario_id__execute_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunScenarioRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prd/scenarios/{scenario_id}/what-if":{"post":{"tags":["PRD Scenarios"],"summary":"Run What If Simulation","description":"POST /api/prd/scenarios/{scenario_id}/what-if\nRun What-If simulation for a scenario","operationId":"run_what_if_simulation_api_prd_scenarios__scenario_id__what_if_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatIfSimulationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prd/history":{"get":{"tags":["PRD Scenarios"],"summary":"Get Scenario History","description":"GET /api/prd/history\nGet user's scenario analysis history","operationId":"get_scenario_history_api_prd_history_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"prd_scenario_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prd Scenario 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"}}}}}}},"/api/prd/history/{scenario_id}":{"get":{"tags":["PRD Scenarios"],"summary":"Get Scenario Result","description":"GET /api/prd/history/{scenario_id}\nGet detailed results for a past scenario","operationId":"get_scenario_result_api_prd_history__scenario_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prd/compare":{"post":{"tags":["PRD Scenarios"],"summary":"Compare Scenarios","description":"POST /api/prd/compare\nCompare two scenario results side-by-side","operationId":"compare_scenarios_api_prd_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareScenarioRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/prd/export/{scenario_id}":{"get":{"tags":["PRD Scenarios"],"summary":"Export Scenario","description":"GET /api/prd/export/{scenario_id}?format=json\nExport scenario results for download","operationId":"export_scenario_api_prd_export__scenario_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prd/portfolio/metrics":{"get":{"tags":["PRD Scenarios"],"summary":"Calculate Portfolio Metrics","description":"GET /api/prd/portfolio/metrics?tickers=AAPL,MSFT&timeframe=1y\nCalculate comprehensive portfolio metrics\n(Helper endpoint for testing)","operationId":"calculate_portfolio_metrics_api_prd_portfolio_metrics_get","parameters":[{"name":"tickers","in":"query","required":true,"schema":{"type":"string","title":"Tickers"}},{"name":"timeframe","in":"query","required":false,"schema":{"type":"string","default":"1y","title":"Timeframe"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prd/subscription/status":{"get":{"tags":["PRD Scenarios"],"summary":"Get Subscription Status","description":"GET /api/prd/subscription/status\nGet current user's subscription status and limits","operationId":"get_subscription_status_api_prd_subscription_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/prd/subscription/start-trial":{"post":{"tags":["PRD Scenarios"],"summary":"Start Trial","description":"POST /api/prd/subscription/start-trial\nStart a 7-day free trial for the user","operationId":"start_trial_api_prd_subscription_start_trial_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/prd/subscription/upgrade":{"post":{"tags":["PRD Scenarios"],"summary":"Upgrade Subscription","description":"POST /api/prd/subscription/upgrade\nUpgrade to Pro subscription\n(In production, this would integrate with Stripe)","operationId":"upgrade_subscription_api_prd_subscription_upgrade_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/prd/admin/make-admin/{user_email}":{"post":{"tags":["PRD Scenarios"],"summary":"Make User Admin","description":"POST /api/prd/admin/make-admin/{user_email}\nGrant admin privileges to a user\n(Requires admin privileges)","operationId":"make_user_admin_api_prd_admin_make_admin__user_email__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_email","in":"path","required":true,"schema":{"type":"string","title":"User Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prd/admin/users":{"get":{"tags":["PRD Scenarios"],"summary":"List All Users","description":"GET /api/prd/admin/users\nList all users with their subscription status\n(Requires admin privileges)","operationId":"list_all_users_api_prd_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/advisor/alerts":{"get":{"tags":["advisor"],"summary":"List Alerts","operationId":"list_alerts_api_advisor_alerts_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"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"}}}}}}},"/api/advisor/alerts/unread-count":{"get":{"tags":["advisor"],"summary":"Unread Count","operationId":"unread_count_api_advisor_alerts_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/advisor/alerts/{alert_id}/read":{"patch":{"tags":["advisor"],"summary":"Mark Read","operationId":"mark_read_api_advisor_alerts__alert_id__read_patch","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/api/advisor/alerts/{alert_id}/dismiss":{"patch":{"tags":["advisor"],"summary":"Dismiss","operationId":"dismiss_api_advisor_alerts__alert_id__dismiss_patch","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/api/advisor/alerts/{alert_id}/resolved":{"patch":{"tags":["advisor"],"summary":"Mark Resolved","operationId":"mark_resolved_api_advisor_alerts__alert_id__resolved_patch","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/api/advisor/brief/latest":{"get":{"tags":["advisor"],"summary":"Latest Brief","operationId":"latest_brief_api_advisor_brief_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/advisor/agent/status":{"get":{"tags":["advisor"],"summary":"Agent Status","operationId":"agent_status_api_advisor_agent_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/advisor/profile":{"get":{"tags":["advisor"],"summary":"Get Advisor Profile","operationId":"get_advisor_profile_api_advisor_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["advisor"],"summary":"Patch Advisor Profile","operationId":"patch_advisor_profile_api_advisor_profile_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/advisor/debug/run-drift":{"post":{"tags":["advisor"],"summary":"Debug Run Drift","description":"Manual trigger for admins only — runs drift job for all users.","operationId":"debug_run_drift_api_advisor_debug_run_drift_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/setup":{"get":{"tags":["agents"],"summary":"Setup Status","operationId":"setup_status_api_agents_setup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["agents"],"summary":"Setup Selection","operationId":"setup_selection_api_agents_setup_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupSelection"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/setup/start":{"post":{"tags":["agents"],"summary":"Setup Start","operationId":"setup_start_api_agents_setup_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/onboarding":{"get":{"tags":["agents"],"summary":"Onboarding Status","operationId":"onboarding_status_api_agents_onboarding_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["agents"],"summary":"Start Onboarding","operationId":"start_onboarding_api_agents_onboarding_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/team":{"get":{"tags":["agents"],"summary":"Portfolio Team","operationId":"portfolio_team_api_agents_team_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/team/review":{"post":{"tags":["agents"],"summary":"Review Team","operationId":"review_team_api_agents_team_review_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/team/followup":{"post":{"tags":["agents"],"summary":"Team Followup","operationId":"team_followup_api_agents_team_followup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamFollowup"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/catalog":{"get":{"tags":["agents"],"summary":"List Agents Catalog","description":"Public browse — no login required.","operationId":"list_agents_catalog_api_agents_catalog_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/catalog/{agent_id}":{"get":{"tags":["agents"],"summary":"Get Agent Catalog","description":"Public agent profile — no login required.","operationId":"get_agent_catalog_api_agents_catalog__agent_id__get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents":{"get":{"tags":["agents"],"summary":"List Agents","operationId":"list_agents_api_agents_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/status":{"get":{"tags":["agents"],"summary":"Agents Status","operationId":"agents_status_api_agents_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/worker-health":{"get":{"tags":["agents"],"summary":"Agent Worker Health","description":"Whether the Railway agent worker has checked in recently (Redis heartbeat).","operationId":"agent_worker_health_api_agents_worker_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agents/{agent_id}":{"get":{"tags":["agents"],"summary":"Get Agent","operationId":"get_agent_api_agents__agent_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/hire":{"post":{"tags":["agents"],"summary":"Hire","operationId":"hire_api_agents__agent_id__hire_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/fire":{"post":{"tags":["agents"],"summary":"Fire","operationId":"fire_api_agents__agent_id__fire_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/pause":{"post":{"tags":["agents"],"summary":"Pause","operationId":"pause_api_agents__agent_id__pause_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/resume":{"post":{"tags":["agents"],"summary":"Resume","operationId":"resume_api_agents__agent_id__resume_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/config":{"put":{"tags":["agents"],"summary":"Update Config","operationId":"update_config_api_agents__agent_id__config_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/run":{"post":{"tags":["agents"],"summary":"Run Now","description":"Trigger on-demand agent run (same Python agents as the worker; max 3/hour).","operationId":"run_now_api_agents__agent_id__run_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/alerts":{"get":{"tags":["alerts"],"summary":"List Alerts","operationId":"list_alerts_api_alerts_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}},{"name":"read","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"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"}}}}}}},"/api/alerts/unread-count":{"get":{"tags":["alerts"],"summary":"Unread Count","operationId":"unread_count_api_alerts_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/alerts/brief/latest":{"get":{"tags":["alerts"],"summary":"Latest Brief","operationId":"latest_brief_api_alerts_brief_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/alerts/bulk-read":{"post":{"tags":["alerts"],"summary":"Bulk Read","operationId":"bulk_read_api_alerts_bulk_read_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkReadBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/alerts/{alert_id}":{"get":{"tags":["alerts"],"summary":"Get Alert","operationId":"get_alert_api_alerts__alert_id__get","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/api/alerts/{alert_id}/read":{"post":{"tags":["alerts"],"summary":"Mark Read","operationId":"mark_read_api_alerts__alert_id__read_post","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/api/alerts/{alert_id}/dismiss":{"post":{"tags":["alerts"],"summary":"Dismiss","operationId":"dismiss_api_alerts__alert_id__dismiss_post","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/api/briefs":{"get":{"tags":["briefs-decisions"],"summary":"List Briefs","operationId":"list_briefs_api_briefs_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"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"}}}}}}},"/api/decisions":{"get":{"tags":["briefs-decisions"],"summary":"List Decisions","operationId":"list_decisions_api_decisions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"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"}}}}}}},"/api/dashboard":{"get":{"tags":["dashboard"],"summary":"Dashboard Summary","operationId":"dashboard_summary_api_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/mcp/keys":{"get":{"tags":["mcp"],"summary":"List Mcp Keys","operationId":"list_mcp_keys_api_mcp_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["mcp"],"summary":"Create Mcp Key","operationId":"create_mcp_key_api_mcp_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMcpKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/mcp/keys/{key_id}":{"delete":{"tags":["mcp"],"summary":"Revoke Mcp Key","operationId":"revoke_mcp_key_api_mcp_keys__key_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/usage":{"get":{"tags":["mcp"],"summary":"Mcp Usage","operationId":"mcp_usage_api_mcp_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/mcp/info":{"get":{"tags":["mcp"],"summary":"Mcp Public Info","description":"Public MCP server metadata (mirrors mcp.getsigvest.com/).","operationId":"mcp_public_info_api_mcp_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/research/topics":{"get":{"tags":["research"],"summary":"Research Topics","description":"Curated research playbooks — public browse.","operationId":"research_topics_api_research_topics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/research/run":{"post":{"tags":["research"],"summary":"Run Research","operationId":"run_research_api_research_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/research/reports":{"get":{"tags":["research"],"summary":"List Reports","operationId":"list_reports_api_research_reports_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/research/reports/{report_id}":{"get":{"tags":["research"],"summary":"Get Report","operationId":"get_report_api_research_reports__report_id__get","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}},"delete":{"tags":["research"],"summary":"Delete Report","operationId":"delete_report_api_research_reports__report_id__delete","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/webhooks/snaptrade":{"post":{"tags":["webhooks"],"summary":"Snaptrade Webhook","operationId":"snaptrade_webhook_webhooks_snaptrade_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/brokerage/connections":{"get":{"tags":["brokerage"],"summary":"List Connections","operationId":"list_connections_api_brokerage_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brokerage/connect":{"post":{"tags":["brokerage"],"summary":"Connect Broker","operationId":"connect_broker_api_brokerage_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brokerage/reconnect":{"post":{"tags":["brokerage"],"summary":"Reconnect Broker","operationId":"reconnect_broker_api_brokerage_reconnect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconnectBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brokerage/sync":{"post":{"tags":["brokerage"],"summary":"Manual Sync","operationId":"manual_sync_api_brokerage_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brokerage/connections/{authorization_id}":{"delete":{"tags":["brokerage"],"summary":"Disconnect","operationId":"disconnect_api_brokerage_connections__authorization_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"authorization_id","in":"path","required":true,"schema":{"type":"string","title":"Authorization Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/test-mongodb":{"get":{"summary":"Test Mongodb","description":"Test MongoDB connection","operationId":"test_mongodb_api_test_mongodb_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/experiments":{"get":{"summary":"Get Experiments","description":"Endpoint disabled","operationId":"get_experiments_api_experiments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/experiments/stats":{"get":{"summary":"Get Experiment Stats","operationId":"get_experiment_stats_api_experiments_stats_get","parameters":[{"name":"experiment","in":"query","required":true,"schema":{"type":"string","title":"Experiment"}},{"name":"since_days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Since Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/upload-portfolio":{"post":{"summary":"Upload Portfolio","description":"Upload or save user portfolio","operationId":"upload_portfolio_api_upload_portfolio_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Portfolio"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/upload-portfolio-csv":{"post":{"summary":"Upload Portfolio Csv","description":"Upload portfolio via CSV file","operationId":"upload_portfolio_csv_api_upload_portfolio_csv_post","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_portfolio_csv_api_upload_portfolio_csv_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/get-portfolio/{user_id}":{"get":{"summary":"Get Portfolio","description":"Retrieve portfolio summary","operationId":"get_portfolio_api_get_portfolio__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"}}}}}}},"/api/analyze-prompt":{"post":{"summary":"Analyze Prompt","description":"Send AI prompt and return stock suggestions","operationId":"analyze_prompt_api_analyze_prompt_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/compare":{"post":{"summary":"Compare Assets","description":"Compare suggested stocks vs portfolio","operationId":"compare_assets_api_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/asset-analyze":{"post":{"summary":"Analyze Asset","description":"Analyze a single asset (stock or crypto) using AI-powered research scenarios","operationId":"analyze_asset_api_asset_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/asset-analyze/scenarios":{"get":{"summary":"Get Analysis Scenarios","description":"Get all available research scenarios","operationId":"get_analysis_scenarios_api_asset_analyze_scenarios_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/demo/asset-analyze":{"post":{"summary":"Demo Analyze Asset","description":"Demo endpoint for asset analysis - No authentication required\nReturns sample analysis data to showcase platform capabilities","operationId":"demo_analyze_asset_api_demo_asset_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/demo/prd/scenarios/{scenario_id}/execute":{"post":{"summary":"Demo Execute Prd Scenario","description":"Demo endpoint for PRD scenario execution - No authentication required\nReturns sample scenario results to showcase platform capabilities","operationId":"demo_execute_prd_scenario_api_demo_prd_scenarios__scenario_id__execute_post","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scenario":{"post":{"summary":"Run Scenario","description":"Run what-if analysis - Requires subscription","operationId":"run_scenario_api_scenario_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/scenario-test":{"post":{"summary":"Run Scenario Test","description":"Run what-if analysis with mock data - Requires subscription","operationId":"run_scenario_test_api_scenario_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/scenario-templates":{"get":{"summary":"Get Scenario Templates","description":"Get all scenario templates, optionally filtered by category or search term","operationId":"get_scenario_templates_api_scenario_templates_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Scenario Template","description":"Create a new scenario template (admin only)","operationId":"create_scenario_template_api_scenario_templates_post","parameters":[{"name":"unique_id","in":"query","required":true,"schema":{"type":"string","title":"Unique Id"}},{"name":"display_prompt","in":"query","required":true,"schema":{"type":"string","title":"Display Prompt"}},{"name":"detailed_prompt","in":"query","required":true,"schema":{"type":"string","title":"Detailed Prompt"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"what_if","title":"Category"}},{"name":"is_active","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scenario-templates/{unique_id}":{"get":{"summary":"Get Scenario Template","description":"Get a specific scenario template by unique ID","operationId":"get_scenario_template_api_scenario_templates__unique_id__get","parameters":[{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Scenario Template","description":"Update a scenario template (admin only)","operationId":"update_scenario_template_api_scenario_templates__unique_id__put","parameters":[{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}},{"name":"display_prompt","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Prompt"}},{"name":"detailed_prompt","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detailed Prompt"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Scenario Template","description":"Delete a scenario template (admin only)","operationId":"delete_scenario_template_api_scenario_templates__unique_id__delete","parameters":[{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scenario-templates/categories":{"get":{"summary":"Get Scenario Template Categories","description":"Get all scenario template categories with counts","operationId":"get_scenario_template_categories_api_scenario_templates_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user-scenarios/{user_id}":{"get":{"summary":"Get User Scenarios","description":"Get all scenarios run by a specific user (limited to 5 most recent)","operationId":"get_user_scenarios_api_user_scenarios__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"}}}}}}},"/api/scenario-details/{scenario_id}":{"get":{"summary":"Get Scenario Details","description":"Get detailed information about a specific scenario execution","operationId":"get_scenario_details_api_scenario_details__scenario_id__get","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user-scenarios":{"post":{"summary":"Create User Scenario","description":"Create a new user scenario","operationId":"create_user_scenario_api_user_scenarios_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scenario-templates/{unique_id}/deactivate":{"patch":{"summary":"Deactivate Scenario Template","description":"Deactivate a scenario template (soft delete)","operationId":"deactivate_scenario_template_api_scenario_templates__unique_id__deactivate_patch","parameters":[{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat-history/{user_id}":{"get":{"summary":"Get Chat History","description":"Get chat history for a user","operationId":"get_chat_history_api_chat_history__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"}}}}}}},"/api/health":{"get":{"summary":"Health Check","description":"Health check endpoint with MongoDB connectivity test","operationId":"health_check_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/health":{"get":{"summary":"Stripe Health Check","description":"Stripe configuration health check endpoint","operationId":"stripe_health_check_api_stripe_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/predefined-prompts":{"get":{"summary":"Get Predefined Prompts","description":"Get list of predefined prompts","operationId":"get_predefined_prompts_api_predefined_prompts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"options":{"summary":"Options Predefined Prompts","description":"Handle CORS preflight for predefined prompts","operationId":"options_predefined_prompts_api_predefined_prompts_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/analyze-prompt-simple":{"post":{"summary":"Analyze Prompt Simple","description":"Simple test endpoint that calls real OpenAI API","operationId":"analyze_prompt_simple_api_analyze_prompt_simple_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/test-scenario":{"post":{"summary":"Test Scenario","description":"Test scenario endpoint without authentication","operationId":"test_scenario_api_test_scenario_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/scenario":{"post":{"summary":"Analyze Scenario","description":"Secure scenario analysis endpoint","operationId":"analyze_scenario_api_analysis_scenario_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analysis/what-if":{"post":{"summary":"Analyze What If","description":"Secure what-if analysis endpoint","operationId":"analyze_what_if_api_analysis_what_if_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analysis/portfolio-optimization":{"post":{"summary":"Analyze Portfolio Optimization","description":"Secure portfolio optimization analysis endpoint","operationId":"analyze_portfolio_optimization_api_analysis_portfolio_optimization_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analysis/risk-assessment":{"post":{"summary":"Analyze Risk Assessment","description":"Secure risk assessment analysis endpoint","operationId":"analyze_risk_assessment_api_analysis_risk_assessment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analysis/market-outlook":{"post":{"summary":"Analyze Market Outlook","description":"Secure market analysis endpoint","operationId":"analyze_market_outlook_api_analysis_market_outlook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analysis/asset-recommendations":{"post":{"summary":"Analyze Asset Recommendations","description":"Secure asset recommendations endpoint","operationId":"analyze_asset_recommendations_api_analysis_asset_recommendations_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"asset_type","in":"query","required":false,"schema":{"type":"string","default":"general","title":"Asset Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/tax-optimization":{"post":{"summary":"Analyze Tax Optimization","description":"Secure tax optimization analysis endpoint","operationId":"analyze_tax_optimization_api_analysis_tax_optimization_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analysis/retirement-planning":{"post":{"summary":"Analyze Retirement Planning","description":"Secure retirement planning analysis endpoint","operationId":"analyze_retirement_planning_api_analysis_retirement_planning_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analysis/esg":{"post":{"summary":"Analyze Esg","description":"Secure ESG analysis endpoint","operationId":"analyze_esg_api_analysis_esg_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/analyze-prompt-test":{"post":{"summary":"Analyze Prompt Test","description":"Test endpoint with mock data - no OpenAI API required","operationId":"analyze_prompt_test_api_analyze_prompt_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user-profile":{"post":{"summary":"Create Or Update Profile","description":"Create or update user profile","operationId":"create_or_update_profile_api_user_profile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user-profile/{user_id}":{"get":{"summary":"Get User Profile","description":"Get user profile","operationId":"get_user_profile_api_user_profile__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"}}}}}}},"/api/transactions":{"post":{"summary":"Add Transaction","description":"Add a new transaction","operationId":"add_transaction_api_transactions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transaction"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transactions/{user_id}":{"get":{"summary":"Get Transactions","description":"Get all transactions for a user","operationId":"get_transactions_api_transactions__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"}}}}}}},"/api/transactions/{transaction_id}":{"delete":{"summary":"Delete Transaction","description":"Delete a transaction","operationId":"delete_transaction_api_transactions__transaction_id__delete","parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","title":"Transaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Transaction","description":"Update a transaction","operationId":"update_transaction_api_transactions__transaction_id__put","parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","title":"Transaction Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transaction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transactions/csv-template":{"get":{"summary":"Download Transactions Csv Template","description":"Download CSV template for transactions (deprecated - use static file /finra_template.csv)\n\nColumns:\n- ticker: Ticker Symbol (e.g., AAPL) - also accepts 'asset_ticker'\n- transaction_type: Transaction Type (buy or sell)\n- asset_class: Asset Class (stock or crypto)\n- quantity: Quantity (e.g., 10)\n- purchase_price: Price per Share (e.g., 150.00)\n- date_bought: Transaction Date (YYYY-MM-DD format)\n- notes: Notes (optional)","operationId":"download_transactions_csv_template_api_transactions_csv_template_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/transactions/upload-csv":{"post":{"summary":"Upload Transactions Csv","description":"Upload transactions from CSV file","operationId":"upload_transactions_csv_api_transactions_upload_csv_post","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_transactions_csv_api_transactions_upload_csv_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portfolio-summary/{user_id}":{"get":{"summary":"Get Portfolio Summary","description":"Get comprehensive portfolio summary with transactions","operationId":"get_portfolio_summary_api_portfolio_summary__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"}}}}}}},"/api/crypto/market-data":{"get":{"summary":"Get Crypto Market Data","description":"Get comprehensive crypto market data","operationId":"get_crypto_market_data_api_crypto_market_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/crypto/price/{ticker}":{"get":{"summary":"Get Crypto Price","description":"Get current price for a specific crypto asset","operationId":"get_crypto_price_api_crypto_price__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"}}}}}}},"/api/crypto/search":{"get":{"summary":"Search Crypto","description":"Search for cryptocurrencies by name or symbol","operationId":"search_crypto_api_crypto_search_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/crypto/trending":{"get":{"summary":"Get Trending Crypto","description":"Get trending cryptocurrencies","operationId":"get_trending_crypto_api_crypto_trending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/portfolio-detailed-analysis/{user_id}":{"get":{"summary":"Get Portfolio Detailed Analysis","description":"Get detailed portfolio analysis with real market data (slower but comprehensive)","operationId":"get_portfolio_detailed_analysis_api_portfolio_detailed_analysis__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"}}}}}}},"/api/stock/quote/{symbol}":{"get":{"summary":"Get Stock Quote","description":"Get real-time stock quote using Polygon.io with Redis caching","operationId":"get_stock_quote_api_stock_quote__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stock/search/{keywords}":{"get":{"summary":"Search Stocks","description":"Search for stocks by keywords","operationId":"search_stocks_api_stock_search__keywords__get","parameters":[{"name":"keywords","in":"path","required":true,"schema":{"type":"string","title":"Keywords"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stock/quotes":{"post":{"summary":"Get Multiple Quotes","description":"Get quotes for multiple symbols","operationId":"get_multiple_quotes_api_stock_quotes_post","requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Symbols"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/signup":{"post":{"summary":"Signup","description":"Register a new user","operationId":"signup_api_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"summary":"Login","description":"Login a user","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/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"summary":"Get Me","description":"Get current user information","operationId":"get_me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"delete":{"summary":"Delete Me","description":"Permanently delete the current user's account and all associated data\n(privacy deletion — GDPR/CCPA). Requires {\"confirm\": \"DELETE\"} in the body.\nCancels any active Stripe subscription immediately.","operationId":"delete_me_api_auth_me_delete","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"summary":"Patch Me","description":"Update current user account fields (display name).","operationId":"patch_me_api_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAccountUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/logout":{"post":{"summary":"Logout","description":"Logout (client-side token removal)","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/google":{"get":{"summary":"Google Auth","description":"Get Google OAuth authorization URL","operationId":"google_auth_api_auth_google_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/google/callback":{"get":{"summary":"Google Callback","description":"Handle Google OAuth callback","operationId":"google_callback_api_auth_google_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Google Callback","description":"Handle Google OAuth callback","operationId":"google_callback_api_auth_google_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/google/verify":{"post":{"summary":"Verify Google Token","description":"Verify Google ID token and authenticate user","operationId":"verify_google_token_api_auth_google_verify_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscription/plans":{"get":{"summary":"Get Plans","description":"Get all available subscription plans","operationId":"get_plans_api_subscription_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/subscription/create-checkout-session":{"post":{"summary":"Create Subscription Checkout","description":"Create a Stripe checkout session for subscription","operationId":"create_subscription_checkout_api_subscription_create_checkout_session_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subscription/create-portal-session":{"post":{"summary":"Create Portal","description":"Create a Stripe customer portal session","operationId":"create_portal_api_subscription_create_portal_session_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subscription/cancel":{"post":{"summary":"Cancel Subscription","description":"Cancel a Stripe subscription","operationId":"cancel_subscription_api_subscription_cancel_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subscription/success":{"post":{"summary":"Handle Subscription Success","description":"Handle successful subscription and update user status","operationId":"handle_subscription_success_api_subscription_success_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subscription/status":{"get":{"summary":"Get Subscription Status","description":"Get current user's subscription status","operationId":"get_subscription_status_api_subscription_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/webhooks/stripe":{"post":{"summary":"Stripe Webhook","description":"Handle Stripe webhook events","operationId":"stripe_webhook_api_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/email/preferences":{"get":{"summary":"Get Email Preferences","description":"Get user's email preferences","operationId":"get_email_preferences_api_email_preferences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"summary":"Update Email Preferences","description":"Update user's email preferences","operationId":"update_email_preferences_api_email_preferences_put","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Preferences"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/email/send-portfolio-analysis":{"post":{"summary":"Send Portfolio Analysis Email","description":"Send portfolio analysis email to current user","operationId":"send_portfolio_analysis_email_api_email_send_portfolio_analysis_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/email/send-welcome":{"post":{"summary":"Send Welcome Email","description":"Send welcome email to current user","operationId":"send_welcome_email_api_email_send_welcome_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/email/send-onboarding":{"post":{"summary":"Send Onboarding Email","description":"Send onboarding email to current user","operationId":"send_onboarding_email_api_email_send_onboarding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/email/trigger-weekly-updates":{"post":{"summary":"Trigger Weekly Portfolio Updates","description":"Manually trigger weekly portfolio update emails (admin only)","operationId":"trigger_weekly_portfolio_updates_api_email_trigger_weekly_updates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/email/trigger-monthly-updates":{"post":{"summary":"Trigger Monthly Portfolio Updates","description":"Manually trigger monthly portfolio update emails (admin only)","operationId":"trigger_monthly_portfolio_updates_api_email_trigger_monthly_updates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/email/trigger-daily-updates":{"post":{"summary":"Trigger Daily Portfolio Updates","description":"Manually trigger daily portfolio update emails (admin only)","operationId":"trigger_daily_portfolio_updates_api_email_trigger_daily_updates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/email/send-agent-digest":{"post":{"summary":"Send Agent Digest Email","description":"Send today's agent activity digest to the current user.","operationId":"send_agent_digest_email_api_email_send_agent_digest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/email/trigger-agent-digest":{"post":{"summary":"Trigger Agent Digest Emails","description":"Manually trigger daily agent digest emails for all eligible users.","operationId":"trigger_agent_digest_emails_api_email_trigger_agent_digest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/market-sentiment":{"get":{"summary":"Get Market Sentiment","description":"Get market sentiment analysis from database\n\nThis endpoint is PUBLIC and returns shared market sentiment data.\nNo authentication required as this data is the same for all users.\n\nALWAYS returns from database - never calculates on request.\nBackground task updates data every 15 minutes.\n\nReturns:\n    Complete sentiment analysis including:\n    - Composite sentiment score (0-100)\n    - Top news articles with sentiment\n    - Fear & Greed Index\n    - Keyword drivers","operationId":"get_market_sentiment_api_market_sentiment_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai-portfolio-summary/{portfolio_id}":{"get":{"summary":"Get Ai Portfolio Summary","description":"Get AI-generated portfolio summary from database (15-min cache)\nReturns cached data if available, only generates if needed\n\nArgs:\n    portfolio_id: User ID (not portfolio ID)\n    current_user: Authenticated user\n    \nReturns:\n    AI-generated summary with insights, drivers, and suggestions","operationId":"get_ai_portfolio_summary_api_ai_portfolio_summary__portfolio_id__get","security":[{"OAuth2PasswordBearer":[]}],"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"}}}}}}},"/api/cache/status/{ticker}":{"get":{"summary":"Get Cache Status","description":"Get cache status for a specific ticker\n\nShows what's cached and TTL for price, quote, and historical data\n\nArgs:\n    ticker: Ticker symbol (e.g., 'BTC', 'AAPL')\n    asset_class: 'stock' or 'crypto'\n    \nReturns:\n    Dictionary with cache information","operationId":"get_cache_status_api_cache_status__ticker__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","default":"stock","title":"Asset Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cache/invalidate/{ticker}":{"delete":{"summary":"Invalidate Ticker Cache","description":"Invalidate all cache entries for a specific ticker\n\nThis deletes:\n- Current price cache\n- Quote cache (stocks only)\n- Historical data cache for all common periods\n\nArgs:\n    ticker: Ticker symbol\n    asset_class: 'stock' or 'crypto'\n    \nReturns:\n    Dictionary with deletion results","operationId":"invalidate_ticker_cache_api_cache_invalidate__ticker__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","default":"stock","title":"Asset Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cache/invalidate-price/{ticker}":{"delete":{"summary":"Invalidate Price Cache","description":"Invalidate only the current price cache for a specific ticker\n\nArgs:\n    ticker: Ticker symbol\n    asset_class: 'stock' or 'crypto'\n    \nReturns:\n    Dictionary with deletion result","operationId":"invalidate_price_cache_api_cache_invalidate_price__ticker__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","default":"stock","title":"Asset Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cache/invalidate-historical/{ticker}":{"delete":{"summary":"Invalidate Historical Cache","description":"Invalidate historical data cache for a specific ticker and period\n\nArgs:\n    ticker: Ticker symbol\n    days: Number of days of historical data\n    asset_class: 'stock' or 'crypto'\n    \nReturns:\n    Dictionary with deletion result","operationId":"invalidate_historical_cache_api_cache_invalidate_historical__ticker__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":365,"title":"Days"}},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","default":"stock","title":"Asset Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cache/refresh/{ticker}":{"post":{"summary":"Refresh Ticker Cache","description":"Force refresh cache for a specific ticker\n\nThis invalidates all cache entries for the ticker, forcing fresh data\nto be fetched from APIs on next request.\n\nArgs:\n    ticker: Ticker symbol\n    asset_class: 'stock' or 'crypto'\n    \nReturns:\n    Dictionary with refresh results","operationId":"refresh_ticker_cache_api_cache_refresh__ticker__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","default":"stock","title":"Asset Class"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AIQuery":{"properties":{"user_id":{"type":"string","title":"User Id"},"prompt":{"type":"string","title":"Prompt"},"timeframe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timeframe","default":"1y"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","default":"openai"}},"type":"object","required":["user_id","prompt"],"title":"AIQuery"},"AgentConfigUpdate":{"properties":{"custom_config":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Custom Config"},"severity_minimum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity Minimum"},"delivery_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Channel"},"quiet_hours_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiet Hours Start"},"quiet_hours_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiet Hours End"},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"}},"type":"object","title":"AgentConfigUpdate"},"AssetAnalyzeRequest":{"properties":{"asset":{"type":"string","title":"Asset"},"scenario_id":{"type":"string","title":"Scenario Id"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","default":"openai"}},"type":"object","required":["asset","scenario_id"],"title":"AssetAnalyzeRequest"},"Body_upload_portfolio_csv_api_upload_portfolio_csv_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_portfolio_csv_api_upload_portfolio_csv_post"},"Body_upload_transactions_csv_api_transactions_upload_csv_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_transactions_csv_api_transactions_upload_csv_post"},"BulkReadBody":{"properties":{"alert_ids":{"items":{"type":"string"},"type":"array","title":"Alert Ids"}},"type":"object","required":["alert_ids"],"title":"BulkReadBody"},"CompareScenarioRequest":{"properties":{"scenario_id_1":{"type":"string","title":"Scenario Id 1"},"scenario_id_2":{"type":"string","title":"Scenario Id 2"}},"type":"object","required":["scenario_id_1","scenario_id_2"],"title":"CompareScenarioRequest"},"ConnectBody":{"properties":{"broker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker"}},"type":"object","title":"ConnectBody"},"CreateMcpKeyRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":"Default"}},"type":"object","title":"CreateMcpKeyRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"OnboardingRequest":{"properties":{"retry":{"type":"boolean","title":"Retry","default":false}},"type":"object","title":"OnboardingRequest"},"Portfolio":{"properties":{"user_id":{"type":"string","title":"User Id"},"items":{"items":{"$ref":"#/components/schemas/PortfolioItem"},"type":"array","title":"Items"},"risk_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Profile","default":"balanced"}},"type":"object","required":["user_id","items"],"title":"Portfolio"},"PortfolioAsset":{"properties":{"ticker":{"type":"string","title":"Ticker"},"quantity":{"type":"number","title":"Quantity"},"purchase_price":{"type":"number","title":"Purchase Price"},"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price"}},"type":"object","required":["ticker","quantity","purchase_price"],"title":"PortfolioAsset"},"PortfolioItem":{"properties":{"ticker":{"type":"string","title":"Ticker"},"quantity":{"type":"number","title":"Quantity"},"purchase_price":{"type":"number","title":"Purchase Price"},"date_bought":{"type":"string","title":"Date Bought"}},"type":"object","required":["ticker","quantity","purchase_price","date_bought"],"title":"PortfolioItem"},"ReconnectBody":{"properties":{"brokerageAuthorizationId":{"type":"string","title":"Brokerageauthorizationid"}},"type":"object","required":["brokerageAuthorizationId"],"title":"ReconnectBody"},"ResearchRunRequest":{"properties":{"question":{"type":"string","maxLength":500,"minLength":1,"title":"Question"},"topic_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic Id"}},"type":"object","required":["question"],"title":"ResearchRunRequest"},"RiskProfileUpdate":{"properties":{"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"drift_threshold_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":2.0},{"type":"null"}],"title":"Drift Threshold Pct"},"concentration_max_pct":{"anyOf":[{"type":"number","maximum":50.0,"minimum":5.0},{"type":"null"}],"title":"Concentration Max Pct"},"drawdown_alert_pct":{"anyOf":[{"type":"number","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Drawdown Alert Pct"},"target_allocations":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Target Allocations"},"risk_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Profile"},"investment_goals":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Investment Goals"},"rebalance_preference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rebalance Preference"},"tax_sensitivity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax Sensitivity"},"advisor_agent_paused":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Advisor Agent Paused"},"daily_brief_email_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Daily Brief Email Enabled"}},"type":"object","title":"RiskProfileUpdate"},"RunScenarioRequest":{"properties":{"portfolio_assets":{"items":{"$ref":"#/components/schemas/PortfolioAsset"},"type":"array","title":"Portfolio Assets"},"user_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Query"}},"type":"object","required":["portfolio_assets"],"title":"RunScenarioRequest"},"ScenarioRequest":{"properties":{"user_id":{"type":"string","title":"User Id"},"action":{"type":"string","title":"Action"},"asset":{"type":"string","title":"Asset"},"percentage":{"type":"number","title":"Percentage"},"timeframe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timeframe","default":"1y"}},"type":"object","required":["user_id","action","asset","percentage"],"title":"ScenarioRequest"},"SetupSelection":{"properties":{"selected_agent_ids":{"items":{"type":"string"},"type":"array","title":"Selected Agent Ids"}},"type":"object","required":["selected_agent_ids"],"title":"SetupSelection"},"TeamFollowup":{"properties":{"incident_id":{"type":"string","title":"Incident Id"},"action":{"type":"string","enum":["reviewed","remind","open"],"title":"Action"}},"type":"object","required":["incident_id","action"],"title":"TeamFollowup"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"},"user":{"type":"object","title":"User"}},"type":"object","required":["access_token","token_type","user"],"title":"Token"},"Transaction":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"user_id":{"type":"string","title":"User Id"},"ticker":{"type":"string","title":"Ticker"},"quantity":{"type":"number","title":"Quantity"},"purchase_price":{"type":"number","title":"Purchase Price"},"date_bought":{"type":"string","title":"Date Bought"},"transaction_type":{"type":"string","title":"Transaction Type","default":"buy"},"asset_class":{"type":"string","title":"Asset Class","default":"stock"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["user_id","ticker","quantity","purchase_price","date_bought"],"title":"Transaction"},"UserAccountUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"UserAccountUpdate"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"type":"string","title":"Name"}},"type":"object","required":["email","password","name"],"title":"UserCreate"},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserLogin"},"UserProfile":{"properties":{"user_id":{"type":"string","title":"User Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"risk_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Profile","default":"balanced"},"investment_goals":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investment Goals"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["user_id"],"title":"UserProfile"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WhatIfSimulationRequest":{"properties":{"portfolio_assets":{"items":{"$ref":"#/components/schemas/PortfolioAsset"},"type":"array","title":"Portfolio Assets"},"suggested_assets":{"items":{"type":"object"},"type":"array","title":"Suggested Assets"},"rebalance_percentage":{"type":"number","title":"Rebalance Percentage","default":0.2}},"type":"object","required":["portfolio_assets","suggested_assets"],"title":"WhatIfSimulationRequest"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/auth/login"}}}}}}