A custom benchmark for every position — built from tradable ETFs, returned in one API call.
Get API key
riskmodels.app/get-key
No portfolio uploaded. No weights sent. Just a ticker-level JOIN against the solved model.
Use directly in your agent workflow — Claude · Cursor · MCP.
SPY +1.97 · XLK −0.17 · IGV −1.16. Residual preserved. Ready to stage.Python SDKinstall once · auth from envCLIbatch jobs · local workflowsMCP / RESTClaude, Cursor, agents, servicesc.batch_analyze(tickers)ER · HR · RR per tickerc.analyze_portfolio(positions)weighted L1 / L2 / L3 roll-upc.get_l3_decomposition(ticker)orth. betas + residualsc.visuals.save_portfolio_risk_cascade_png(…)variance waterfallc.post_portfolio_risk_snapshot_pdf(…)R1 tear sheet PDFc.get_rankings(ticker, metric="subsector_residual")Alpha RR rank · multi-window