{"openapi":"3.1.0","info":{"title":"EchoLab","version":"2.0.0"},"paths":{"/api/health":{"get":{"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/api/proxy/test":{"get":{"summary":"Proxy Test","description":"Test the proxy pool. Returns whether each proxy can reach X.com.\n\n- mobile: tests the single MOBILE_PROXY_URL\n- isp_pool: tests up to 5 proxies from the pool\n- none: returns the direct-from-VPS result (will be blocked)","operationId":"proxy_test_api_proxy_test_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Proxy Test Api Proxy Test Get"}}}}}}},"/api/status":{"get":{"summary":"Status","operationId":"status_api_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Status Api Status Get"}}}}}}},"/api/drafts":{"get":{"summary":"Drafts","operationId":"drafts_api_drafts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Drafts Api Drafts Get"}}}}}}},"/api/drafts/{index}/dismiss":{"post":{"summary":"Dismiss Draft","operationId":"dismiss_draft_api_drafts__index__dismiss_post","parameters":[{"name":"index","in":"path","required":true,"schema":{"type":"integer","title":"Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Dismiss Draft Api Drafts  Index  Dismiss Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fleet":{"get":{"summary":"Fleet","operationId":"fleet_api_fleet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Fleet Api Fleet Get"}}}}}}},"/api/fleet/bulk-load":{"post":{"summary":"Bulk Load Accounts","description":"Bulk-load accounts (designed to handle 10K+ at scale).\n\nBody: {\"accounts\": [{username, auth_token, ct0, user_agent?, x_user_id?, persona?}, ...]}\nOR body is itself a list.\n\nWrites them to data/accounts.json (the bot fleet file). The runner\npicks them up on the next farm cycle. Atomic write (write to .tmp,\nrename) so a partial upload doesn't break the runner mid-cycle.","operationId":"bulk_load_accounts_api_fleet_bulk_load_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Bulk Load Accounts Api Fleet Bulk Load Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cost-calculator":{"get":{"summary":"Cost Calculator","description":"Honest cost math for `target_followers` bot followers, 2026 prices.\n\nVendors (per AI Journal 2026 review + direct marketplace research):\n  - AccsMarket:   $0.12 soft-reg / $0.50 PVA / $1-3 aged 2007-2015\n  - AccsZone:     $0.50 fresh PVA / $1-3 aged / $5+ premium\n  - G2G:          $0.65 aged 2009+\n  - Z2U:          $0.90 aged (with year/country filter)\n  - PlayerUp:     $2-5K+ with middleman\n  - FameSwap:     $100-$10K+ for accounts WITH real followers\n\nMonthly attrition rates (conservative 2026):\n  - Soft-reg:  50% per month (banned in days)\n  - Fresh PVA: 30% per month (banned in weeks)\n  - Aged 2009+: 20% per month (X knows them, lasts months)\n  - Aged PVA+:  15% per month (best survival)","operationId":"cost_calculator_api_cost_calculator_get","parameters":[{"name":"target_followers","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"Target Followers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Cost Calculator Api Cost Calculator Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/settings":{"get":{"summary":"Cost Calculator","description":"Honest cost math for `target_followers` bot followers, 2026 prices.\n\nVendors (per AI Journal 2026 review + direct marketplace research):\n  - AccsMarket:   $0.12 soft-reg / $0.50 PVA / $1-3 aged 2007-2015\n  - AccsZone:     $0.50 fresh PVA / $1-3 aged / $5+ premium\n  - G2G:          $0.65 aged 2009+\n  - Z2U:          $0.90 aged (with year/country filter)\n  - PlayerUp:     $2-5K+ with middleman\n  - FameSwap:     $100-$10K+ for accounts WITH real followers\n\nMonthly attrition rates (conservative 2026):\n  - Soft-reg:  50% per month (banned in days)\n  - Fresh PVA: 30% per month (banned in weeks)\n  - Aged 2009+: 20% per month (X knows them, lasts months)\n  - Aged PVA+:  15% per month (best survival)","operationId":"cost_calculator_api_settings_get","parameters":[{"name":"target_followers","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"Target Followers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Cost Calculator Api Settings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Update Settings","description":"Update runtime settings. Writes to .env on the host so they\nsurvive restarts.","operationId":"update_settings_api_settings_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Update Settings Api Settings Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trigger/cycle":{"post":{"summary":"Trigger Cycle","operationId":"trigger_cycle_api_trigger_cycle_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Trigger Cycle Api Trigger Cycle Post"}}}}}}},"/api/trigger/daily":{"post":{"summary":"Trigger Daily","operationId":"trigger_daily_api_trigger_daily_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Trigger Daily Api Trigger Daily Post"}}}}}}},"/api/trigger/farm":{"post":{"summary":"Trigger Farm","operationId":"trigger_farm_api_trigger_farm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Trigger Farm Api Trigger Farm Post"}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/_old_index":{"get":{"summary":"Index Old Unused","operationId":"index_old_unused__old_index_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/onboard":{"get":{"summary":"Onboard Page","operationId":"onboard_page_onboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/free-sms/provision":{"post":{"summary":"Trigger Free Sms Provision","operationId":"trigger_free_sms_provision_api_free_sms_provision_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Trigger Free Sms Provision Api Free Sms Provision Post"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Health":{"properties":{"status":{"type":"string","title":"Status"},"target":{"type":"string","title":"Target"},"seed_configured":{"type":"boolean","title":"Seed Configured"},"farm_enabled":{"type":"boolean","title":"Farm Enabled"},"llm_configured":{"type":"boolean","title":"Llm Configured"},"db_ok":{"type":"boolean","title":"Db Ok"},"last_cycle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Cycle"},"last_daily":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Daily"},"proxy_mode":{"type":"string","title":"Proxy Mode","default":"none"},"mobile_proxy_configured":{"type":"boolean","title":"Mobile Proxy Configured","default":false},"isp_proxy_pool_size":{"type":"integer","title":"Isp Proxy Pool Size","default":0}},"type":"object","required":["status","target","seed_configured","farm_enabled","llm_configured","db_ok","last_cycle","last_daily"],"title":"Health"},"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"}}}}