{"service":"MT5 Drawdown API","swagger_ui":"/api/docs","redoc":"/api/redoc","openapi_json":"/api/openapi.json","endpoints":{"chart":"GET /api/chart/{account_login}?token=...","equity_timeline_csv":"GET /api/equity-timeline/{login}?csv_from_msc=&csv_to_msc= or csv_from_utc=&csv_to_utc= (UTC strings e.g. 2026-02-25 16:06:54.980 …)","equity_timeline_rows":"GET /api/equity-timeline/{login}/rows?from_utc=&to_utc=&offset=&limit= — paginated JSON from equity_timelines cache (builds on miss)","drawdown_summary":"GET /api/drawdown-summary/{account_login}?token=...","drawdown_summary_peek":"GET /api/drawdown-summary/{account_login}/peek — cached drawdown overview only; no full replay engine run","positions":"POST /api/positions — JSON body: {account_login, token}","deals":"POST /api/deals — JSON body: {account_login, token, limit_rows?}; flat deal rows from timebase (newest first)","less_than_minute_profits":"POST /api/less_than_minute_profits — {account_login, token, max_duration_seconds?}","sap":"POST /api/sap — JSON body: {account_login, token, time_seconds}","hedge":"POST /api/hedge — same body as sap; opposite-side pairs (BUY↔SELL)","hedge_by_account":"POST /api/hedge-by-account — like sap-by-account + similarity_percent; hedge matching","cid":"POST /api/cid — JSON body: {account_login, token}; journal CID overlap from user_logs","accounts_analysis":"GET /api/accounts/analysis?login=MT5_LOGIN (Bearer JWT or API token query)","accounts_users_by_logins":"POST /api/accounts/users-by-logins — {logins, fields} e.g. fields=Login,Group; MT5 UserRequestByLoginsNumPy","accounts_plugin_status":"GET /api/accounts/plugin-status?login=MT5_LOGIN — plugin accounts row + drawdown breach flags (active | drawdown_breached | inactive)","accounts_equity_chart":"POST /api/accounts/equity-chart — Owlex chart {meta, overallDrawdownLimit, seriesCompression: gzip+json-1, seriesData: base64(gzip(JSON series)))}","ticks_history":"POST /api/ticks/history — {symbol, from_utc, to_utc}; MT5 bid/ask ticks (Bearer API token)","accounts_owlex_info":"POST /api/accounts/profit-limit-80/analyze — 80% profit limit detection (read-only); POST /api/accounts/owlex-info — proxy to lastprop account rules (body: token, account_login)","auth_login":"POST /api/auth/login — {email, password}; responds with interim_access_token + auth_step=require_totp_enrollment|require_totp_code until TOTP complete; then GET /api/auth/2fa/setup + POST enrollment/finish, or POST auth/2fa/login/verify","auth_refresh":"POST /api/auth/refresh — Bearer JWT; returns new access_token + user.permissions from DB (session sync after permission changes)","dashboard_market_stats":"POST /api/dashboard/market-stats — optional {groups?, symbols?}; JWT or API token; aggregate open positions by group/symbol (MT5 PositionRequestByGroup)","trading_groups":"GET /api/trading-groups?token= — optional query token if no Bearer JWT; returns MT5 group path list (MARKET_STATS_GROUPS_JSON defaults)","change_group":"POST /api/change-group — Owlex Provider parity: {account_login, new_group, token}","change_balance":"POST /api/change-balance — deposit (+amount) or withdrawal (−amount) with comment; optional fund_as_credit for positive amounts (DEAL_CREDIT): {account_login, amount, comment, fund_as_credit?, token}","change_password":"POST /api/change-password — change main or investor MT5 password: {account_login, password, password_type, token}","create_account":"POST /api/create-account — Provider parity: create MT5 user, fund (deposit or credit), init plugin; {group, name, master_password, investor_password, leverage?, balance?, fund_as_credit?, daily_drawdown_pct?, total_drawdown_pct?, d4_pct?, td3_pct?, profit_target_pct?, profit_target_price?, email?, phone?, country?, city?, address?, zip_code?, comment?, token}","init_plugin":"POST /api/init-plugin — Provider parity: register/update plugin accounts row; {account_login, daily_drawdown_pct, total_drawdown_pct, token, initial_balance?, d4_pct?, td3_pct?, profit_target_pct?}","cancel_plugin":"POST /api/cancel-plugin — Provider parity: {account_login, token}"}}