Same SQL screens against history. Backtest with ?asof=YYYY-MM-DD, or replay against the actual historical fires of any named signal. Depth scales with plan (1 year on Hobby, 5 on Pro, all-time on Scale). No lookahead bias, no separate research stack.
GET /v2/scan?asof= + /v2/signals/.../history
Pass ?asof=YYYY-MM-DD to any scan and get exactly what would have matched on that day — flags, indicators, and field values computed from data available at that point. Or query the signal history endpoint to see every time NVDA was actually rsi_oversold over the historical window.
-- the same scan, 90 days ago
GET /v2/scan?q=rsi_oversold AND volume_unusual_2x
&asof=2026-02-20| ticker | rsi | rel_vol | return_30d |
|---|---|---|---|
| NVDA | 27.3 | 2.4× | +8.2% |
| AMD | 28.1 | 2.1× | +3.4% |
| MARA | 22.5 | 3.2× | −2.1% |
| RIOT | 26.8 | 2.7× | +4.7% |
| COIN | 29.4 | 2.0× | +11.3% |
| SOFI | 23.9 | 2.5× | +6.8% |
primitives you’ll use
Same screen, with history. Same signals, with their fires.
BacktestsPass ?asof= to any scan and get point-in-time matches on that day. Same WHERE clause as live.
See backtests →Signal historyYears of actual signal fires per ticker. Validate against what really happened, not what conditions imply.
See signals →ScreenersThe query you’ll be validating. Run it live or with ?asof= using the same syntax.
See screeners →why this works
The WHERE clause you backtest is the WHERE clause that goes live. No re-implementing the strategy in a different DSL, no quiet drift between research and prod.
Indicators and flags at asof reflect what was computable that day — not what we know in retrospect. The 30-day return shown alongside a backtest match is the forward return as of that historical date.
We don’t simulate the historical fire by reconstructing conditions. Signal values are stored as they would have been visible at the close of each historical day. Query against that record directly.
1 year on Hobby, 5 years on Pro, all-time on Scale.
comparison
Reconstruct the data, write the harness, hope for no lookahead
Same SQL, historical or live
works with your agent
Hand validation to your agent. It can sweep dozens of variants of a strategy against history in seconds, then promote the winners to a live webhook — same SQL all the way through.
ship it