{"openapi":"3.1.0","info":{"title":"QuantForge API","description":"Hardened REST API for quant research: options, backtests, portfolio optimization, risk, and ML.","version":"0.1.0"},"paths":{"/v1/options/price":{"post":{"tags":["options"],"summary":"Price Option","operationId":"price_option_v1_options_price_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptionsPriceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptionsPriceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options/iv":{"post":{"tags":["options"],"summary":"Implied Vol","operationId":"implied_vol_v1_options_iv_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpliedVolRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpliedVolResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/backtest":{"post":{"tags":["backtest"],"summary":"Run Backtest","operationId":"run_backtest_v1_backtest_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portfolio/optimize":{"post":{"tags":["portfolio"],"summary":"Optimize","operationId":"optimize_v1_portfolio_optimize_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioOptimizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioOptimizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/risk/var":{"post":{"tags":["risk"],"summary":"Compute Var","operationId":"compute_var_v1_risk_var_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaRRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaRResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ml/train":{"post":{"tags":["ml"],"summary":"Train","operationId":"train_v1_ml_train_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MLTrainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MLTrainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/data/{ticker}":{"get":{"tags":["market"],"summary":"Market Data","operationId":"market_data_v1_market_data__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"2020-01-01","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"2025-01-01","title":"End"}},{"name":"sample","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":0,"default":200,"title":"Sample"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/backtest":{"post":{"tags":["jobs"],"summary":"Submit Backtest Job","operationId":"submit_backtest_job_v1_jobs_backtest_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/ml-train":{"post":{"tags":["jobs"],"summary":"Submit Ml Job","operationId":"submit_ml_job_v1_jobs_ml_train_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MLTrainRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","operationId":"get_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Cancel Job","operationId":"cancel_job_v1_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs":{"get":{"tags":["jobs"],"summary":"List Jobs","operationId":"list_jobs_v1_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Jobs V1 Jobs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/token":{"post":{"tags":["auth"],"summary":"Issue","operationId":"issue_v1_auth_token_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/alerts/rules":{"get":{"tags":["alerts"],"summary":"List Rules","operationId":"list_rules_v1_alerts_rules_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Rules V1 Alerts Rules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["alerts"],"summary":"Create Rule","operationId":"create_rule_v1_alerts_rules_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSpec"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Rule V1 Alerts Rules Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/alerts/rules/{rule_name}":{"delete":{"tags":["alerts"],"summary":"Delete Rule","operationId":"delete_rule_v1_alerts_rules__rule_name__delete","parameters":[{"name":"rule_name","in":"path","required":true,"schema":{"type":"string","title":"Rule Name"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Rule V1 Alerts Rules  Rule Name  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/alerts/evaluate":{"post":{"tags":["alerts"],"summary":"Evaluate","operationId":"evaluate_v1_alerts_evaluate_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/alerts/events":{"get":{"tags":["alerts"],"summary":"Recent Events","operationId":"recent_events_v1_alerts_events_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Recent Events V1 Alerts Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audit":{"get":{"tags":["audit"],"summary":"Recent","description":"Return recent audit entries.\n\nPrivacy model:\n  - Authenticated callers see their *own* audit history (scoped by\n    the SHA-256 prefix of their API key).\n  - On demo deploys (`QUANTFORGE_ALLOW_UNAUTH=true`), unauthenticated\n    callers see a global stream with the `owner` column masked, so\n    the UI's \"Recent Activity\" feed has something to show without\n    leaking which key generated which call. Real owner hashes are\n    only revealed when the caller authenticates.\n  - On hardened deploys, anonymous callers get 401 (unchanged).\n\nThere is no 'list every owner unmasked' endpoint: that would be a\ncross-tenant leak. If you need full audit data, read the SQLite\nfile directly from inside the cluster.","operationId":"recent_v1_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Recent V1 Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/backtest/walk-forward":{"post":{"tags":["backtest"],"summary":"Walk Forward","description":"Split the date range into N non-overlapping folds, run the same strategy\non each. Returns per-fold stats and overall average Sharpe/return.","operationId":"walk_forward_v1_backtest_walk_forward_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalkForwardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Walk Forward V1 Backtest Walk Forward Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/backtest/compare":{"post":{"tags":["backtest"],"summary":"Compare","description":"Run N strategies in parallel and return ranked results by Sharpe.","operationId":"compare_v1_backtest_compare_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Compare V1 Backtest Compare Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthz":{"get":{"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}},"head":{"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/readyz":{"get":{"summary":"Readyz","operationId":"readyz_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadinessResponse"}}}}}},"head":{"summary":"Readyz","operationId":"readyz_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadinessResponse"}}}}}}},"/v1/meta/version":{"get":{"summary":" Version","operationId":"_version_v1_meta_version_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BacktestRequest":{"properties":{"strategy":{"type":"string","enum":["momentum","ma_crossover","bollinger_mr","donchian","rsi_reversal","factor","cross_sec_momentum","dual_momentum","regime_switch","vol_target_momentum","buy_and_hold"],"title":"Strategy","description":"Strategy name"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"tickers":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Tickers"},"start":{"type":"string","title":"Start","default":"2015-01-01"},"end":{"type":"string","title":"End","default":"2025-01-01"},"capital":{"type":"number","maximum":1000000000.0,"exclusiveMinimum":0.0,"title":"Capital","default":100000},"sizing_fraction":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Sizing Fraction","default":0.25},"rebalance":{"type":"string","enum":["bar","weekly","monthly"],"title":"Rebalance","default":"monthly"}},"type":"object","required":["strategy"],"title":"BacktestRequest"},"BacktestResponse":{"properties":{"strategy":{"type":"string","title":"Strategy"},"n_bars":{"type":"integer","title":"N Bars"},"n_trades":{"type":"integer","title":"N Trades"},"final_equity":{"type":"number","title":"Final Equity"},"summary_stats":{"additionalProperties":{"type":"number"},"type":"object","title":"Summary Stats"},"equity_curve_sample":{"additionalProperties":{"type":"number"},"type":"object","title":"Equity Curve Sample"}},"type":"object","required":["strategy","n_bars","n_trades","final_equity","summary_stats","equity_curve_sample"],"title":"BacktestResponse"},"CompareRequest":{"properties":{"strategies":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":12,"minItems":2,"title":"Strategies","description":"list of BacktestRequest-shaped dicts"}},"type":"object","required":["strategies"],"title":"CompareRequest"},"EvalRequest":{"properties":{"context":{"additionalProperties":{"type":"number"},"type":"object","title":"Context","description":"Metric values keyed by name"}},"type":"object","required":["context"],"title":"EvalRequest"},"EvalResponse":{"properties":{"fired":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Fired"},"n_rules":{"type":"integer","title":"N Rules"}},"type":"object","required":["fired","n_rules"],"title":"EvalResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","enum":["ok","degraded","unhealthy"],"title":"Status"},"version":{"type":"string","title":"Version"},"uptime_s":{"type":"number","title":"Uptime S"}},"type":"object","required":["status","version","uptime_s"],"title":"HealthResponse"},"ImpliedVolRequest":{"properties":{"price":{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0,"title":"Price"},"S":{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0,"title":"S"},"K":{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0,"title":"K"},"T":{"type":"number","maximum":50.0,"exclusiveMinimum":0.0,"title":"T"},"r":{"type":"number","maximum":1.0,"minimum":-0.5,"title":"R","default":0.04},"option":{"type":"string","enum":["call","put"],"title":"Option","default":"call"},"q":{"type":"number","maximum":0.5,"minimum":0.0,"title":"Q","default":0.0}},"type":"object","required":["price","S","K","T"],"title":"ImpliedVolRequest"},"ImpliedVolResponse":{"properties":{"implied_vol":{"type":"number","title":"Implied Vol"}},"type":"object","required":["implied_vol"],"title":"ImpliedVolResponse"},"MLTrainRequest":{"properties":{"ticker":{"type":"string","title":"Ticker","default":"SPY"},"start":{"type":"string","title":"Start","default":"2010-01-01"},"end":{"type":"string","title":"End","default":"2025-01-01"},"n_estimators":{"type":"integer","maximum":500.0,"minimum":10.0,"title":"N Estimators","default":100},"max_depth":{"type":"integer","maximum":10.0,"minimum":2.0,"title":"Max Depth","default":3},"learning_rate":{"type":"number","maximum":0.5,"exclusiveMinimum":0.0,"title":"Learning Rate","default":0.05}},"type":"object","title":"MLTrainRequest"},"MLTrainResponse":{"properties":{"train_acc":{"type":"number","title":"Train Acc"},"val_acc":{"type":"number","title":"Val Acc"},"test_acc":{"type":"number","title":"Test Acc"},"train_auc":{"type":"number","title":"Train Auc"},"val_auc":{"type":"number","title":"Val Auc"},"test_auc":{"type":"number","title":"Test Auc"},"baseline_acc":{"type":"number","title":"Baseline Acc"},"top_features":{"additionalProperties":{"type":"number"},"type":"object","title":"Top Features"},"n_train":{"type":"integer","title":"N Train"},"n_val":{"type":"integer","title":"N Val"},"n_test":{"type":"integer","title":"N Test"}},"type":"object","required":["train_acc","val_acc","test_acc","train_auc","val_auc","test_auc","baseline_acc","top_features","n_train","n_val","n_test"],"title":"MLTrainResponse"},"MarketDataResponse":{"properties":{"ticker":{"type":"string","title":"Ticker"},"n_bars":{"type":"integer","title":"N Bars"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"last_close":{"type":"number","title":"Last Close"},"ytd_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ytd Return"},"bars":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Bars"}},"type":"object","required":["ticker","n_bars","start_date","end_date","last_close"],"title":"MarketDataResponse"},"OptionsPriceRequest":{"properties":{"S":{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0,"title":"S","description":"Spot price"},"K":{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0,"title":"K","description":"Strike price"},"T":{"type":"number","maximum":50.0,"exclusiveMinimum":0.0,"title":"T","description":"Years to expiry"},"r":{"type":"number","maximum":1.0,"minimum":-0.5,"title":"R","description":"Risk-free rate","default":0.04},"sigma":{"type":"number","maximum":5.0,"exclusiveMinimum":0.0,"title":"Sigma","description":"Volatility"},"option":{"type":"string","enum":["call","put"],"title":"Option","default":"call"},"q":{"type":"number","maximum":0.5,"minimum":0.0,"title":"Q","description":"Dividend yield","default":0.0},"steps":{"type":"integer","maximum":5000.0,"minimum":10.0,"title":"Steps","description":"CRR steps","default":500},"n_paths":{"type":"integer","maximum":500000.0,"minimum":1000.0,"title":"N Paths","description":"MC paths","default":50000},"seed":{"anyOf":[{"type":"integer","maximum":2147483647.0,"minimum":0.0},{"type":"null"}],"title":"Seed","default":42}},"type":"object","required":["S","K","T","sigma"],"title":"OptionsPriceRequest"},"OptionsPriceResponse":{"properties":{"black_scholes":{"type":"number","title":"Black Scholes"},"crr_european":{"type":"number","title":"Crr European"},"crr_american":{"type":"number","title":"Crr American"},"monte_carlo":{"type":"number","title":"Monte Carlo"},"monte_carlo_stderr":{"type":"number","title":"Monte Carlo Stderr"},"greeks":{"additionalProperties":{"type":"number"},"type":"object","title":"Greeks"}},"type":"object","required":["black_scholes","crr_european","crr_american","monte_carlo","monte_carlo_stderr","greeks"],"title":"OptionsPriceResponse"},"PortfolioOptimizeRequest":{"properties":{"tickers":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":2,"title":"Tickers"},"start":{"type":"string","title":"Start","default":"2015-01-01"},"end":{"type":"string","title":"End","default":"2025-01-01"},"objective":{"type":"string","enum":["max_sharpe","min_variance","erc","hrp"],"title":"Objective","default":"max_sharpe"},"risk_free":{"type":"number","maximum":0.5,"minimum":-0.2,"title":"Risk Free","default":0.02}},"type":"object","required":["tickers"],"title":"PortfolioOptimizeRequest"},"PortfolioOptimizeResponse":{"properties":{"weights":{"additionalProperties":{"type":"number"},"type":"object","title":"Weights"},"expected_return":{"type":"number","title":"Expected Return"},"expected_vol":{"type":"number","title":"Expected Vol"},"expected_sharpe":{"type":"number","title":"Expected Sharpe"}},"type":"object","required":["weights","expected_return","expected_vol","expected_sharpe"],"title":"PortfolioOptimizeResponse"},"ReadinessResponse":{"properties":{"status":{"type":"string","enum":["ready","not_ready"],"title":"Status"},"checks":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Checks"}},"type":"object","required":["status","checks"],"title":"ReadinessResponse"},"RuleSpec":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9_.:-]+$","title":"Name"},"metric":{"type":"string","title":"Metric","description":"one of: drawdown, var, vol, loss, pnl, spread_z, exposure"},"threshold":{"type":"number","title":"Threshold"},"direction":{"type":"string","enum":["above","below"],"title":"Direction","default":"above"},"severity":{"type":"string","enum":["info","warning","critical"],"title":"Severity","default":"warning"}},"type":"object","required":["name","metric","threshold"],"title":"RuleSpec"},"TokenRequest":{"properties":{"subject":{"type":"string","maxLength":128,"minLength":1,"title":"Subject"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Scopes"},"ttl_seconds":{"type":"integer","maximum":86400.0,"minimum":60.0,"title":"Ttl Seconds","default":3600}},"type":"object","required":["subject"],"title":"TokenRequest"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"Bearer"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["access_token","expires_in"],"title":"TokenResponse"},"VaRRequest":{"properties":{"returns":{"items":{"type":"number"},"type":"array","maxItems":100000,"minItems":20,"title":"Returns"},"confidence":{"type":"number","exclusiveMaximum":1.0,"exclusiveMinimum":0.5,"title":"Confidence","default":0.95},"method":{"type":"string","enum":["historical","parametric","cornish_fisher","monte_carlo"],"title":"Method","default":"historical"}},"type":"object","required":["returns"],"title":"VaRRequest"},"VaRResponse":{"properties":{"var":{"type":"number","title":"Var"},"cvar":{"type":"number","title":"Cvar"},"method":{"type":"string","title":"Method"},"n_observations":{"type":"integer","title":"N Observations"}},"type":"object","required":["var","cvar","method","n_observations"],"title":"VaRResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WalkForwardRequest":{"properties":{"strategy":{"type":"string","enum":["momentum","ma_crossover","bollinger_mr","donchian","rsi_reversal","factor","cross_sec_momentum","dual_momentum","regime_switch","vol_target_momentum","buy_and_hold"],"title":"Strategy","description":"Strategy name"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"tickers":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Tickers"},"start":{"type":"string","title":"Start","default":"2015-01-01"},"end":{"type":"string","title":"End","default":"2025-01-01"},"capital":{"type":"number","maximum":1000000000.0,"exclusiveMinimum":0.0,"title":"Capital","default":100000},"sizing_fraction":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Sizing Fraction","default":0.25},"rebalance":{"type":"string","enum":["bar","weekly","monthly"],"title":"Rebalance","default":"monthly"},"n_folds":{"type":"integer","maximum":20.0,"minimum":2.0,"title":"N Folds","default":5}},"type":"object","required":["strategy"],"title":"WalkForwardRequest"}}}}