API reference
Validate run spec
POST/backtests/atop/validate
Validate a run spec without dispatching execution.
10 requests / minute per key (write tier). Returns the {success, message, data} envelope.
Authorizations
Authorizationstringheaderrequired
Bearer token - an ito_* key (from Settings) holding the backtests:read scope.
Body
strategy_idstring
Example: "wsc_crypto_updown_delta_hedged_roll"
dataset_idstring
Example: "clickhouse:ito_hot.platform_orderbook_l2"
venuesarray
Example: ["polymarket"]
date_rangeobject
Example: {"start":"2026-05-14T14:45:00Z","end":"2026-05-14T14:46:00Z"}
paramsobject
Example: {"roll_trigger":"liquidity_spread_score","size_mode":"liquidity_weighted","liquidity_size_fraction":0.1}
executionobject
Example: {"fill_model":"l2_vwap","latency_ms":50,"max_book_age_ms":1000,"partial_fills":true,"fee_bps":0}
budgetsobject
Example: {"max_wall_clock_seconds":1800,"max_rows":10000000000,"max_cost_usd":25}
Request
curl -X POST "https://itomarkets.com/api/v1/backtests/atop/validate" \ -H "Authorization: Bearer $ITO_API_KEY" \ -H "Content-Type: application/json" \ -d ' { "strategy_id": "wsc_crypto_updown_delta_hedged_roll", "dataset_id": "clickhouse:ito_hot.platform_orderbook_l2", "venues": [ "polymarket" ], "date_range": { "start": "2026-05-14T14:45:00Z", "end": "2026-05-14T14:46:00Z" }, "params": { "roll_trigger": "liquidity_spread_score", "size_mode": "liquidity_weighted", "liquidity_size_fraction": 0.1 }, "execution": { "fill_model": "l2_vwap", "latency_ms": 50, "max_book_age_ms": 1000, "partial_fills": true, "fee_bps": 0 }, "budgets": { "max_wall_clock_seconds": 1800, "max_rows": 10000000000, "max_cost_usd": 25 } } 'ResponseJSON
{ "success": true, "message": "Success", "data": { "run_id": "dry_run", "status": "validated", "spec": { "strategy_id": "wsc_crypto_updown_delta_hedged_roll", "spec_hash": "6a91f0c4e2d85b37a1c9f4e0d2b6873c5e1a0f9d4c8b2e6a7d3f5c1b8e4a0d92", "budgets": { "max_wall_clock_seconds": 1800, "max_rows": 10000000000, "max_cost_usd": 25 } }, "metrics": {} }}