{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/trading-bot/signals":{"get":{"tags":["trading-bot"],"summary":"Get Signals","operationId":"get_signals_api_trading_bot_signals_get","parameters":[{"name":"pair","in":"query","required":false,"schema":{"type":"string","title":"Pair"}},{"name":"timeframe","in":"query","required":false,"schema":{"type":"string","default":"hourly","title":"Timeframe"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","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/trading-bot/signals/{pair}":{"get":{"tags":["trading-bot"],"summary":"Get Signal For Pair","operationId":"get_signal_for_pair_api_trading_bot_signals__pair__get","parameters":[{"name":"pair","in":"path","required":true,"schema":{"type":"string","title":"Pair"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/equity-curve":{"get":{"tags":["trading-bot"],"summary":"Get Equity Curve","operationId":"get_equity_curve_api_trading_bot_equity_curve_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"pair","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pair"}},{"name":"timeframe","in":"query","required":false,"schema":{"type":"string","default":"hourly","title":"Timeframe"}},{"name":"include_trades","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Trades"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/public-summary":{"get":{"tags":["trading-bot"],"summary":"Get Public Summary","description":"Public endpoint - returns performance summary without auth.\n\nUsed by dashboard for hybrid public/subscriber access.\nReturns only summary stats, no detailed data.","operationId":"get_public_summary_api_trading_bot_public_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/trades":{"get":{"tags":["trading-bot"],"summary":"Get Trade History","operationId":"get_trade_history_api_trading_bot_trades_get","parameters":[{"name":"pair","in":"query","required":false,"schema":{"type":"string","title":"Pair"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/pnl-summary":{"get":{"tags":["trading-bot"],"summary":"Get Pnl Summary","operationId":"get_pnl_summary_api_trading_bot_pnl_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/pairs":{"get":{"tags":["trading-bot"],"summary":"Get Available Pairs","operationId":"get_available_pairs_api_trading_bot_pairs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/trading-bot/public-performance":{"get":{"tags":["trading-bot"],"summary":"Get Public Performance","description":"Public endpoint for accuracy page - returns performance with ratios.","operationId":"get_public_performance_api_trading_bot_public_performance_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/forecast-accuracy":{"get":{"tags":["trading-bot"],"summary":"Get Forecast Accuracy","description":"Public endpoint for forecast accuracy (MAE + error stddev).","operationId":"get_forecast_accuracy_api_trading_bot_forecast_accuracy_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"pair_limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Pair Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/public-signals-history":{"get":{"tags":["trading-bot"],"summary":"Get Public Signals History","description":"Public endpoint for buy/sell level history chart.","operationId":"get_public_signals_history_api_trading_bot_public_signals_history_get","parameters":[{"name":"pair","in":"query","required":false,"schema":{"type":"string","default":"BTC_USDT","title":"Pair"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":168,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trading-bot/public-signals-latest":{"get":{"tags":["trading-bot"],"summary":"Get Public Signals Latest","description":"Public endpoint returning latest signal per pair with PnL data.","operationId":"get_public_signals_latest_api_trading_bot_public_signals_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/trading-bot/fast-forecasts":{"get":{"tags":["trading-bot"],"summary":"Get Fast Forecasts","description":"Ultra-fast cached forecast API - 5 second TTL, minimal latency.","operationId":"get_fast_forecasts_api_trading_bot_fast_forecasts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/trading-bot/webhook-info":{"get":{"tags":["trading-bot"],"summary":"Webhook Info","description":"Webhook configuration info for customers.","operationId":"webhook_info_api_trading_bot_webhook_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/tools/":{"get":{"tags":["tools"],"summary":"Tools Index","operationId":"tools_index_tools__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools":{"get":{"tags":["tools"],"summary":"Tools Index","operationId":"tools_index_tools_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/bags":{"get":{"tags":["tools"],"summary":"Bags Tool Page","operationId":"bags_tool_page_tools_bags_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/api/bags/profile/{username}":{"get":{"tags":["tools"],"summary":"Get Bags Profile","operationId":"get_bags_profile_tools_api_bags_profile__username__get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/api/bags/lookup":{"post":{"tags":["tools"],"summary":"Lookup Bags Profiles","operationId":"lookup_bags_profiles_tools_api_bags_lookup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/api/bags/upload-twitter":{"post":{"tags":["tools"],"summary":"Upload Twitter Data","operationId":"upload_twitter_data_tools_api_bags_upload_twitter_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_twitter_data_tools_api_bags_upload_twitter_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/api/bags/crawl":{"post":{"tags":["tools"],"summary":"Start Crawl","operationId":"start_crawl_tools_api_bags_crawl_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/api/bags/friends/{user_id}":{"get":{"tags":["tools"],"summary":"Get Friends Bags","operationId":"get_friends_bags_tools_api_bags_friends__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"}}}}}}},"/tools/api/bags/stats":{"get":{"tags":["tools"],"summary":"Bags Stats","operationId":"bags_stats_tools_api_bags_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/dashboard":{"get":{"summary":"Dashboard","operationId":"dashboard_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/trading-bot":{"get":{"summary":"Trading Bot Page","operationId":"trading_bot_page_trading_bot_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/how-it-works":{"get":{"summary":"How It Works","operationId":"how_it_works_how_it_works_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/coins":{"get":{"summary":"Coins","description":"CMC-style forecasts overview with ranked coins from Poloniex.","operationId":"coins_coins_get","parameters":[{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"HOUR_1","title":"Interval"}},{"name":"test","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Test"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/coin":{"get":{"summary":"Coin Route","operationId":"coin_route_coin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/coins/{pair_id}":{"get":{"summary":"Coin Detail","operationId":"coin_detail_coins__pair_id__get","parameters":[{"name":"pair_id","in":"path","required":true,"schema":{"type":"string","title":"Pair Id"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"HOUR_1","title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/docs":{"get":{"summary":"Docs Page","operationId":"docs_page_docs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"summary":"Privacy","operationId":"privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/terms":{"get":{"summary":"Terms","operationId":"terms_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/data":{"get":{"summary":"Data","operationId":"data_data_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/contact":{"get":{"summary":"Contact","operationId":"contact_contact_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog":{"get":{"summary":"Blog Index","operationId":"blog_index_blog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blogs":{"get":{"summary":"Blogs Index","operationId":"blogs_index_blogs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/rss.xml":{"get":{"summary":"Blog Rss","operationId":"blog_rss_blog_rss_xml_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/{slug}":{"get":{"summary":"Blog Post","operationId":"blog_post_blog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login":{"get":{"summary":"Login","operationId":"login_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/signup":{"get":{"summary":"Signup","operationId":"signup_signup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/accuracy":{"get":{"summary":"Accuracy","operationId":"accuracy_accuracy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/sitemap":{"get":{"summary":"Sitemap","operationId":"sitemap_sitemap_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Xml","operationId":"sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/robots.txt":{"get":{"summary":"Robots","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/pricing":{"get":{"summary":"Pricing","operationId":"pricing_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/risk":{"get":{"summary":"Risk Overview","description":"Risk overview landing page with upsell to live streaming.","operationId":"risk_overview_risk_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/risk/{pair_id}":{"get":{"summary":"Risk Pair","operationId":"risk_pair_risk__pair_id__get","parameters":[{"name":"pair_id","in":"path","required":true,"schema":{"type":"string","title":"Pair Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/create-checkout-session":{"post":{"summary":"Create Checkout Session","operationId":"create_checkout_session_create_checkout_session_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_create_checkout_session_create_checkout_session_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/create-checkout-session-embedded":{"post":{"summary":"Create Checkout Session Embedded","description":"Create embedded Stripe checkout session for subscriptions (like netwrck)","operationId":"create_checkout_session_embedded_create_checkout_session_embedded_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/create-credits-checkout":{"post":{"summary":"Create Credits Checkout","description":"Create embedded Stripe checkout session for API credits (like netwrck)","operationId":"create_credits_checkout_api_create_credits_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscription-success":{"get":{"summary":"Subscription Success","operationId":"subscription_success_subscription_success_get","parameters":[{"name":"session_id","in":"query","required":false,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stripe-webhook":{"post":{"summary":"Stripe Webhook","operationId":"stripe_webhook_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/attach-credits":{"post":{"summary":"Attach Credits","description":"Attach credits to a user account","operationId":"attach_credits_api_attach_credits_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/create-user":{"post":{"summary":"Create User Flexible","description":"Create a new user (JSON body, user/password auth only)","operationId":"create_user_flexible_api_create_user_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/signup":{"post":{"summary":"Api Signup","description":"Signup endpoint - creates new user, rejects if email exists","operationId":"api_signup_api_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/login":{"post":{"summary":"Api Login","description":"Authenticate user with email and password (form-encoded)","operationId":"api_login_api_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_api_login_api_login_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/session":{"get":{"summary":"Api Session","description":"Get current session user","operationId":"api_session_api_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/dashboard/metrics":{"get":{"summary":"Api Dashboard Metrics Endpoint","operationId":"api_dashboard_metrics_endpoint_api_dashboard_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/dashboard/bot-status":{"get":{"summary":"Api Bot Status","operationId":"api_bot_status_api_dashboard_bot_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/logout":{"post":{"summary":"Api Logout","description":"Logout user and clear session","operationId":"api_logout_api_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/test-results":{"post":{"summary":"Collect Test Results","description":"Collect Jasmine test results from frontend","operationId":"collect_test_results_api_test_results_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"Get Test Results","description":"Get collected test results","operationId":"get_test_results_api_test_results_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Clear Test Results","description":"Clear test results store","operationId":"clear_test_results_api_test_results_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/test-runner":{"get":{"summary":"Test Runner Page","description":"Page that runs all tests in iframes and collects results","operationId":"test_runner_page_test_runner_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/get-user":{"post":{"summary":"Get User","description":"Get user information - create if doesn't exist (Firebase integration)","operationId":"get_user_api_get_user_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetUserRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}":{"get":{"summary":"Get User By Id","description":"Get user by ID (authenticated, self-only).","operationId":"get_user_by_id_api_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users-referral/{user_id}":{"get":{"summary":"Get User Referral","description":"Get user with referral data (authenticated, self-only).","operationId":"get_user_referral_api_users_referral__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/get-api-usage":{"post":{"summary":"Get Api Usage","description":"Get API usage data for a user","operationId":"get_api_usage_api_get_api_usage_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetUserRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/save-autotopup-settings":{"post":{"summary":"Save Autotopup Settings","description":"Save auto top-up settings for a user","operationId":"save_autotopup_settings_api_save_autotopup_settings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/autotopup-settings":{"post":{"summary":"Update Autotopup Settings","description":"Alias for save-autotopup-settings with simpler form data","operationId":"update_autotopup_settings_api_autotopup_settings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/purchase-credits":{"post":{"summary":"Purchase Credits","description":"Create checkout session for purchasing credits","operationId":"purchase_credits_api_purchase_credits_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/usage-history/{user_id}":{"get":{"summary":"Get Usage History","description":"Get API usage history for a user","operationId":"get_usage_history_api_usage_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/regenerate-key":{"post":{"summary":"Regenerate Api Key","description":"Regenerate API key for user","operationId":"regenerate_api_key_api_regenerate_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/portal":{"get":{"summary":"Portal Redirect","description":"Redirect to Stripe customer portal","operationId":"portal_redirect_portal_get","parameters":[{"name":"customer_id","in":"query","required":true,"schema":{"type":"string","title":"Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account":{"get":{"summary":"Account","description":"Account page with subscription management","operationId":"account_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api":{"get":{"summary":"Api","operationId":"api_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/about":{"get":{"summary":"About","operationId":"about_about_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/referrals":{"get":{"summary":"Referrals","operationId":"referrals_referrals_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/coin/{currency_pair}":{"get":{"summary":"Coin Predict","description":"Public coin prediction page with SEO optimization and comprehensive coin information","operationId":"coin_predict_coin__currency_pair__get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint to verify app and static files","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/coins":{"get":{"summary":"Coin Api","description":"Get current data for all coins with error handling","operationId":"coin_api_api_coins_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/coin/{currency_pair}":{"get":{"summary":"Coin Api Pair","operationId":"coin_api_pair_api_coin__currency_pair__get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/coins/forecasts/hourly":{"get":{"summary":"Coins Hourly Forecasts","operationId":"coins_hourly_forecasts_api_coins_forecasts_hourly_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Limit"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"HOUR_1","title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/coins/forecasts/hourly/{currency_pair}":{"get":{"summary":"Coins Hourly Forecast Pair","operationId":"coins_hourly_forecast_pair_api_coins_forecasts_hourly__currency_pair__get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":48,"title":"Limit"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"HOUR_1","title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/forecasts":{"get":{"summary":"Forecasts Api","operationId":"forecasts_api_api_forecasts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/forecasts/{currency_pair}":{"get":{"summary":"Forecasts Api Pair","operationId":"forecasts_api_pair_api_forecasts__currency_pair__get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/forecasts/{currency_pair}/bars":{"get":{"summary":"Forecast Bars Api","description":"Return forecasted OHLC bars with quantile bands for charting.","operationId":"forecast_bars_api_api_forecasts__currency_pair__bars_get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}},{"name":"steps","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Steps"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"HOUR_1","title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/homepage/forecast/{currency_pair}":{"get":{"summary":"Homepage Forecast Api","description":"Get OHLC forecast for homepage display.\nUses Chronos2 to forecast 24 steps ahead with hourly caching.\nReturns historical candles + forecast bars.","operationId":"homepage_forecast_api_api_homepage_forecast__currency_pair__get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}},{"name":"steps","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Steps"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"HOUR_1","title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/forecast/daily/{currency_pair}":{"get":{"summary":"Daily Forecast Api","description":"Get daily + hourly combined forecasts.\nUses DailyForecaster with hourly-to-daily aggregation.\nReturns historical daily bars, forecast daily bars, and optionally hourly forecasts.","operationId":"daily_forecast_api_api_forecast_daily__currency_pair__get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"include_hourly","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Hourly"}},{"name":"hourly_steps","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hourly Steps"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/forecast/line":{"post":{"summary":"Forecast Line Api","operationId":"forecast_line_api_api_forecast_line_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineForecastRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/forecast/{currency_pair}":{"post":{"summary":"Trigger Forecast","description":"Trigger a forecast via the inference server","operationId":"trigger_forecast_api_forecast__currency_pair__post","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/inference/health":{"get":{"summary":"Check Inference Health","description":"Check if the inference server is accessible","operationId":"check_inference_health_api_inference_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/config":{"get":{"summary":"Get Api Config","description":"Get API configuration for frontend","operationId":"get_api_config_api_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/coin/{currency_pair}/history":{"get":{"summary":"Coin History Api","description":"Get historical data for charting - last N hours of data points","operationId":"coin_history_api_api_coin__currency_pair__history_get","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/coins/live":{"get":{"summary":"Coins Live Api","description":"Get current live data for all coins with minimal latency","operationId":"coins_live_api_api_coins_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/coins/live/subscriber":{"get":{"summary":"Coins Live Subscriber","operationId":"coins_live_subscriber_api_coins_live_subscriber_get","parameters":[{"name":"secret","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health-inference":{"get":{"summary":"Health Inference","operationId":"health_inference_health_inference_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/broadcast/{currency_pair}":{"post":{"summary":"Broadcast","operationId":"broadcast_broadcast__currency_pair__post","parameters":[{"name":"currency_pair","in":"path","required":true,"schema":{"type":"string","title":"Currency Pair"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_api_login_api_login_post":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}},"type":"object","title":"Body_api_login_api_login_post"},"Body_create_checkout_session_create_checkout_session_post":{"properties":{"plan":{"type":"string","title":"Plan"}},"type":"object","required":["plan"],"title":"Body_create_checkout_session_create_checkout_session_post"},"Body_upload_twitter_data_tools_api_bags_upload_twitter_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["file","user_id"],"title":"Body_upload_twitter_data_tools_api_bags_upload_twitter_post"},"CrawlRequest":{"properties":{"user_id":{"type":"string","title":"User Id"},"usernames":{"items":{"type":"string"},"type":"array","title":"Usernames"},"max_depth":{"type":"integer","title":"Max Depth","default":1}},"type":"object","required":["user_id","usernames"],"title":"CrawlRequest"},"CreateCheckoutRequest":{"properties":{"uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uid"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"subscription_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Type"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"referral":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral"}},"type":"object","title":"CreateCheckoutRequest"},"CreateUserRequest":{"properties":{"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}},"type":"object","required":["email"],"title":"CreateUserRequest"},"CreditsCheckoutRequest":{"properties":{"uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uid"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"},"amount":{"type":"number","title":"Amount"}},"type":"object","required":["amount"],"title":"CreditsCheckoutRequest"},"GetUserRequest":{"properties":{"uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uid"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"GetUserRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LineForecastRequest":{"properties":{"series":{"items":{"type":"number"},"type":"array","title":"Series"},"prediction_length":{"type":"integer","title":"Prediction Length","default":24},"interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interval"},"interval_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Interval Minutes"},"last_timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Timestamp"}},"type":"object","required":["series"],"title":"LineForecastRequest"},"LookupRequest":{"properties":{"usernames":{"items":{"type":"string"},"type":"array","title":"Usernames"}},"type":"object","required":["usernames"],"title":"LookupRequest"},"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"}}}}