{"request_schema":{"$defs":{"Breakout":{"additionalProperties":false,"properties":{"type":{"const":"breakout","title":"Type","type":"string"},"params":{"$ref":"#/$defs/BreakoutParams","default":{"lookback":20,"atr_mult":2.0,"risk_per_trade":0.05,"max_position_pct":0.5,"max_positions":3,"gate":"btc_ma50","min_stop_pct":0.06,"max_stop_pct":0.4}}},"required":["type"],"title":"Breakout","type":"object"},"BreakoutParams":{"additionalProperties":false,"properties":{"lookback":{"default":20,"description":"Buy when close > highest high of prior N days","maximum":60,"minimum":5,"title":"Lookback","type":"integer"},"atr_mult":{"default":2.0,"description":"Trailing stop = highest close - k*ATR14","maximum":6,"minimum":0.5,"title":"Atr Mult","type":"number"},"risk_per_trade":{"default":0.05,"description":"Fraction of equity risked to the initial stop","exclusiveMinimum":0,"maximum":0.25,"title":"Risk Per Trade","type":"number"},"max_position_pct":{"default":0.5,"exclusiveMinimum":0,"maximum":1.0,"title":"Max Position Pct","type":"number"},"max_positions":{"default":3,"maximum":10,"minimum":1,"title":"Max Positions","type":"integer"},"gate":{"default":"btc_ma50","description":"Only open trades when BTC > 50-day SMA (btc_ma50) or >=50% of universe above 20d SMA (breadth50)","enum":["none","btc_ma50","breadth50"],"title":"Gate","type":"string"},"min_stop_pct":{"default":0.06,"exclusiveMinimum":0,"maximum":0.5,"title":"Min Stop Pct","type":"number"},"max_stop_pct":{"default":0.4,"exclusiveMinimum":0,"maximum":0.9,"title":"Max Stop Pct","type":"number"}},"title":"BreakoutParams","type":"object"},"Dip":{"additionalProperties":false,"properties":{"type":{"const":"dip","title":"Type","type":"string"},"params":{"$ref":"#/$defs/DipParams","default":{"drop_pct":0.15,"days":1,"trend_filter":"ma50","max_hold_days":5,"hard_stop_pct":0.15,"max_positions":3}}},"required":["type"],"title":"Dip","type":"object"},"DipParams":{"additionalProperties":false,"properties":{"drop_pct":{"default":0.15,"description":"Buy after a fall of at least this fraction over `days`","exclusiveMaximum":0.9,"exclusiveMinimum":0.01,"title":"Drop Pct","type":"number"},"days":{"default":1,"maximum":10,"minimum":1,"title":"Days","type":"integer"},"trend_filter":{"default":"ma50","enum":["ma50","none"],"title":"Trend Filter","type":"string"},"max_hold_days":{"default":5,"maximum":60,"minimum":1,"title":"Max Hold Days","type":"integer"},"hard_stop_pct":{"default":0.15,"exclusiveMaximum":0.9,"exclusiveMinimum":0.01,"title":"Hard Stop Pct","type":"number"},"max_positions":{"default":3,"maximum":10,"minimum":1,"title":"Max Positions","type":"integer"}},"title":"DipParams","type":"object"},"MATrend":{"additionalProperties":false,"properties":{"type":{"const":"ma_trend","title":"Type","type":"string"},"params":{"$ref":"#/$defs/MATrendParams","default":{"coins":["ETH-USD"],"ma_days":50}}},"required":["type"],"title":"MATrend","type":"object"},"MATrendParams":{"additionalProperties":false,"properties":{"coins":{"default":["ETH-USD"],"description":"Coinbase product ids, e.g. ETH-USD","items":{"type":"string"},"maxItems":10,"minItems":1,"title":"Coins","type":"array"},"ma_days":{"default":50,"maximum":60,"minimum":5,"title":"Ma Days","type":"integer"}},"title":"MATrendParams","type":"object"},"Momentum":{"additionalProperties":false,"properties":{"type":{"const":"momentum","title":"Type","type":"string"},"params":{"$ref":"#/$defs/MomentumParams","default":{"lookback":14,"top_n":2,"rebalance_days":7,"gate":"btc_ma50","trail_pct":null}}},"required":["type"],"title":"Momentum","type":"object"},"MomentumParams":{"additionalProperties":false,"properties":{"lookback":{"default":14,"description":"Rank by N-day return","maximum":60,"minimum":3,"title":"Lookback","type":"integer"},"top_n":{"default":2,"maximum":10,"minimum":1,"title":"Top N","type":"integer"},"rebalance_days":{"default":7,"maximum":30,"minimum":1,"title":"Rebalance Days","type":"integer"},"gate":{"default":"btc_ma50","enum":["none","btc_ma50","breadth50"],"title":"Gate","type":"string"},"trail_pct":{"anyOf":[{"exclusiveMaximum":0.9,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Optional % trailing stop from highest close","title":"Trail Pct"}},"title":"MomentumParams","type":"object"},"Universe":{"additionalProperties":false,"properties":{"mode":{"default":"point_in_time","description":"point_in_time = top-N by trailing 20d $ volume AS OF each day (no survivorship bias); current_top = top-N as of the end date (biased, for comparison); fixed = your coin list","enum":["point_in_time","current_top","fixed"],"title":"Mode","type":"string"},"top_n":{"default":30,"maximum":200,"minimum":5,"title":"Top N","type":"integer"},"min_age_days":{"default":35,"description":"Days a coin must have traded before it is eligible","maximum":120,"minimum":0,"title":"Min Age Days","type":"integer"},"min_avg_dollar_volume":{"default":1000000.0,"description":"Min 20-day avg Coinbase $ volume","minimum":0,"title":"Min Avg Dollar Volume","type":"number"},"coins":{"anyOf":[{"items":{"type":"string"},"maxItems":200,"type":"array"},{"type":"null"}],"default":null,"title":"Coins"}},"title":"Universe","type":"object"}},"additionalProperties":false,"properties":{"strategy":{"discriminator":{"mapping":{"breakout":"#/$defs/Breakout","dip":"#/$defs/Dip","ma_trend":"#/$defs/MATrend","momentum":"#/$defs/Momentum"},"propertyName":"type"},"oneOf":[{"$ref":"#/$defs/Breakout"},{"$ref":"#/$defs/Momentum"},{"$ref":"#/$defs/Dip"},{"$ref":"#/$defs/MATrend"}],"title":"Strategy"},"universe":{"$ref":"#/$defs/Universe","default":{"mode":"point_in_time","top_n":30,"min_age_days":35,"min_avg_dollar_volume":1000000.0,"coins":null}},"start":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD (default: ~6 months before end)","title":"Start"},"end":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD (default: last completed UTC day)","title":"End"},"initial_capital":{"default":150,"exclusiveMinimum":0,"maximum":1000000000.0,"title":"Initial Capital","type":"number"},"fee":{"default":0.009,"description":"Fee per side (0.009 = Coinbase intro taker 0.9%)","maximum":0.05,"minimum":0,"title":"Fee","type":"number"},"slippage":{"default":0.002,"maximum":0.05,"minimum":0,"title":"Slippage","type":"number"},"include_trades":{"default":true,"title":"Include Trades","type":"boolean"}},"required":["strategy"],"title":"BacktestRequest","type":"object"},"example_request":{"strategy":{"type":"breakout","params":{"lookback":20,"atr_mult":2.0,"risk_per_trade":0.05,"gate":"btc_ma50"}},"universe":{"mode":"point_in_time","top_n":30},"start":"2026-04-25","end":"2026-10-25","initial_capital":150,"fee":0.009,"slippage":0.002},"price":"$0.05","network":"eip155:8453","asset":"USDC","pay_to":"0x4E6E6C5889dc8B1B96c60AB82D21ED45C6b629f3","data_range":["2026-01-20","2026-10-25"],"endpoints":{"POST /backtest":{"price":"$0.05","description":"Backtest any crypto strategy on 399 Coinbase coins, bias-free. Breakout, momentum, dip-buy or MA trend rules on Coinbase daily data with fees, slippage, H1/H2 split, luck flag and survivorship-bias-free universe.","body_schema":{"additionalProperties":false,"properties":{"strategy":{"oneOf":[{"additionalProperties":false,"properties":{"type":{"const":"breakout","type":"string"},"params":{"additionalProperties":false,"properties":{"lookback":{"maximum":60,"minimum":5,"type":"integer"},"atr_mult":{"maximum":6,"minimum":0.5,"type":"number"},"risk_per_trade":{"exclusiveMinimum":0,"maximum":0.25,"type":"number"},"max_position_pct":{"exclusiveMinimum":0,"maximum":1.0,"type":"number"},"max_positions":{"maximum":10,"minimum":1,"type":"integer"},"gate":{"enum":["none","btc_ma50","breadth50"],"type":"string"},"min_stop_pct":{"exclusiveMinimum":0,"maximum":0.5,"type":"number"},"max_stop_pct":{"exclusiveMinimum":0,"maximum":0.9,"type":"number"}},"type":"object"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"momentum","type":"string"},"params":{"additionalProperties":false,"properties":{"lookback":{"maximum":60,"minimum":3,"type":"integer"},"top_n":{"maximum":10,"minimum":1,"type":"integer"},"rebalance_days":{"maximum":30,"minimum":1,"type":"integer"},"gate":{"enum":["none","btc_ma50","breadth50"],"type":"string"},"trail_pct":{"anyOf":[{"exclusiveMaximum":0.9,"exclusiveMinimum":0,"type":"number"},{"type":"null"}]}},"type":"object"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"dip","type":"string"},"params":{"additionalProperties":false,"properties":{"drop_pct":{"exclusiveMaximum":0.9,"exclusiveMinimum":0.01,"type":"number"},"days":{"maximum":10,"minimum":1,"type":"integer"},"trend_filter":{"enum":["ma50","none"],"type":"string"},"max_hold_days":{"maximum":60,"minimum":1,"type":"integer"},"hard_stop_pct":{"exclusiveMaximum":0.9,"exclusiveMinimum":0.01,"type":"number"},"max_positions":{"maximum":10,"minimum":1,"type":"integer"}},"type":"object"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"ma_trend","type":"string"},"params":{"additionalProperties":false,"properties":{"coins":{"items":{"type":"string"},"maxItems":10,"minItems":1,"type":"array"},"ma_days":{"maximum":60,"minimum":5,"type":"integer"}},"type":"object"}},"required":["type"],"type":"object"}]},"universe":{"additionalProperties":false,"properties":{"mode":{"enum":["point_in_time","current_top","fixed"],"type":"string"},"top_n":{"maximum":200,"minimum":5,"type":"integer"},"min_age_days":{"maximum":120,"minimum":0,"type":"integer"},"min_avg_dollar_volume":{"minimum":0,"type":"number"},"coins":{"anyOf":[{"items":{"type":"string"},"maxItems":200,"type":"array"},{"type":"null"}]}},"type":"object"},"start":{"anyOf":[{"type":"string"},{"type":"null"}]},"end":{"anyOf":[{"type":"string"},{"type":"null"}]},"initial_capital":{"exclusiveMinimum":0,"maximum":1000000000.0,"type":"number"},"fee":{"maximum":0.05,"minimum":0,"type":"number"},"slippage":{"maximum":0.05,"minimum":0,"type":"number"},"include_trades":{"type":"boolean"}},"required":["strategy"],"type":"object"},"example_input":{"strategy":{"type":"breakout","params":{"lookback":20,"atr_mult":2.0,"risk_per_trade":0.05,"gate":"btc_ma50"}},"universe":{"mode":"point_in_time","top_n":30},"start":"2026-04-25","end":"2026-10-25","initial_capital":150,"fee":0.009,"slippage":0.002},"example_output":{"final_value":166.47,"return_pct":10.98,"max_drawdown_pct":-23.77,"closed_trades":26,"fees_paid":22.08,"win_rate":0.308,"luck_flag":true},"free_precheck":"POST /validate"},"GET /signals":{"price":"$0.01","description":"Daily crypto market regime: BTC/ETH trend, breadth, breakout watchlist. BTC/ETH vs 20/50-day MAs, market breadth (% of point-in-time top-N above 20DMA), coins nearest a 20-day breakout, and the R1 breakout strategy's gate and entry signals. Completed UTC daily closes only.","query_schema":{"type":"object","properties":{"top_n":{"type":"integer","minimum":5,"maximum":200,"default":30,"description":"Universe size for breadth / breakout scan (point-in-time top-N by 20d $ volume)"}},"additionalProperties":false},"example_input":{"top_n":30},"example_output":{"as_of":"2026-10-25","regime":"risk-off","btc":{"close":80053.16,"ma50":81802.02,"above_ma50":false,"pct_vs_ma50":-2.14},"eth":{"close":2326.75,"ma20":2453.37,"above_ma20":false,"pct_vs_ma20":-5.16},"breadth":{"coins":30,"pct_above_ma20":3.3,"pct_above_ma50":20.0},"nearest_breakouts":[{"coin":"ZEC-USD","pct_from_breakout":-12.7,"r1_stop_pct":20.49}],"r1_breakout":{"gate_open":false,"signals":[],"action":"no new entries: BTC is below its 50-day average"}},"free_precheck":null},"POST /token-check":{"price":"$0.02","description":"Token scam check: honeypot, mint/pause/blacklist, fake-USDC lookalikes. Scam/honeypot/rug risk check for a Base, Ethereum or Solana token: unverified code, sell restrictions, mint/pause/blacklist powers, taxes, upgradeable proxy, age, liquidity, fake major-token impersonation and spam-airdrop patterns. Never visits metadata URLs.","body_schema":{"additionalProperties":false,"properties":{"chain":{"enum":["base","ethereum","solana"],"type":"string"},"address":{"maxLength":44,"minLength":32,"type":"string"}},"required":["chain","address"],"type":"object"},"example_input":{"chain":"base","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"example_output":{"chain":"base","address":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","name":"USD Coin","symbol":"USDC","canonical_major_token":"USDC","risk_level":"low","risk_score":0,"verdict":"Canonical major token on this chain. No major red flags found by these checks.","flags":[{"id":"upgradeable_proxy","severity":"info","detail":"Upgradeable proxy...","source":"rpc/goplus"}],"facts":{"verified_source":true,"is_proxy":true,"taxes_pct":{"buy":0,"sell":0},"age_days":1165}},"free_precheck":"POST /validate/token-check"},"POST /optimize":{"price":"$0.50","description":"Find robust strategy params, not lucky ones: tests up to 50 combos of a backtest strategy; ranks by worst-half (H1/H2) return with neighbourhood smoothing, flags overfitting, and recommends the most robust parameters rather than the best-fit ones.","body_schema":{"additionalProperties":false,"properties":{"strategy":{"additionalProperties":false,"properties":{"type":{"enum":["breakout","momentum","dip","ma_trend"],"type":"string"},"params":{"additionalProperties":true,"type":"object"}},"required":["type"],"type":"object"},"grid":{"additionalProperties":{"items":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}]},"type":"array"},"type":"object"},"universe":{"additionalProperties":false,"properties":{"mode":{"enum":["point_in_time","current_top","fixed"],"type":"string"},"top_n":{"maximum":200,"minimum":5,"type":"integer"},"min_age_days":{"maximum":120,"minimum":0,"type":"integer"},"min_avg_dollar_volume":{"minimum":0,"type":"number"},"coins":{"anyOf":[{"items":{"type":"string"},"maxItems":200,"type":"array"},{"type":"null"}]}},"type":"object"},"start":{"anyOf":[{"type":"string"},{"type":"null"}]},"end":{"anyOf":[{"type":"string"},{"type":"null"}]},"initial_capital":{"exclusiveMinimum":0,"maximum":1000000000.0,"type":"number"},"fee":{"maximum":0.05,"minimum":0,"type":"number"},"slippage":{"maximum":0.05,"minimum":0,"type":"number"},"rank_by":{"enum":["robust","return"],"type":"string"}},"required":["strategy","grid"],"type":"object"},"example_input":{"strategy":{"type":"breakout","params":{"gate":"btc_ma50"}},"grid":{"lookback":[10,20,30],"atr_mult":[1.5,2.0,3.0],"risk_per_trade":[0.03,0.05]},"universe":{"mode":"point_in_time","top_n":30},"start":"2026-04-25","end":"2026-10-25","initial_capital":150,"fee":0.009,"slippage":0.002},"example_output":{"combos_total":18,"combos_run":18,"truncated":false,"recommended":{"params":{"lookback":20,"atr_mult":2.0,"risk_per_trade":0.05},"return_pct":10.98,"h1_return_pct":-6.97,"h2_return_pct":19.88,"robust_score":-11.97},"best_by_return":{"params":{"lookback":10,"atr_mult":2.0,"risk_per_trade":0.05}},"overfitting_flags":[{"id":"best_return_not_robust","detail":"..."}],"summary":{"median_return_pct":1.2,"pct_profitable":55.6}},"free_precheck":"POST /validate/optimize"},"GET /universe":{"price":"$0.05","description":"Survivorship-free top-N coin list for any past date. Top-N Coinbase USD pairs by trailing 20-day dollar volume as of a past date, using only data available that day (survivorship-bias-free universe for backtests).","query_schema":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"YYYY-MM-DD (default: last completed day)"},"top_n":{"type":"integer","minimum":1,"maximum":200,"default":30},"min_age_days":{"type":"integer","minimum":0,"maximum":120,"default":35},"min_avg_dollar_volume":{"type":"number","minimum":0,"default":1000000}},"additionalProperties":false},"example_input":{"date":"2026-07-01","top_n":30},"example_output":{"date":"2026-07-01","top_n":3,"count":3,"coins":[{"rank":1,"coin":"BTC-USD","avg_dollar_volume_20d":1100000000.0,"age_days":162,"close":107000.0}]},"free_precheck":"GET /validate/universe"}},"optimize_tunable_params":{"breakout":["lookback","atr_mult","risk_per_trade","max_position_pct","max_positions","gate","min_stop_pct","max_stop_pct"],"momentum":["lookback","top_n","rebalance_days","gate","trail_pct"],"dip":["drop_pct","days","trend_filter","max_hold_days","hard_stop_pct","max_positions"],"ma_trend":["ma_days"]},"optimize_max_combos":50,"optimize_time_limit_s":20.0,"token_check_sources":{"public_rpc":"eth_getCode/eth_call/eth_getStorageAt on mainnet.base.org, base.drpc.org, base-rpc.publicnode.com, ethereum-rpc.publicnode.com, eth.drpc.org; Solana api.mainnet-beta.solana.com (rate-limited public endpoints)","goplus":"api.gopluslabs.io token_security (free, no key, 30 calls/min)","honeypot_is":"api.honeypot.is/v2/IsHoneypot buy/sell simulation (free, no key currently; Ethereum, BSC, Base; Uniswap V2/V3-style pools)","dexscreener":"api.dexscreener.com/tokens/v1 (free, no key, 300 req/min): liquidity, volume, first pool date","blockscout":"base/eth.blockscout.com API v2 (keyless): verification + creation tx; may be Cloudflare-blocked, fallback = archive eth_getCode binary search for deployment time"},"notes":["Signals on completed UTC daily close, fills next open; fees+slippage both sides.","start must be >= 60 days after first_day (indicator warm-up).","Unpaid calls get 402 before any validation. Paid calls with invalid input get 4xx and are NOT settled (you are not charged). Use the free /validate* pre-checks first."]}