---
title: "Validate a strategy/signal before you execute (sync)"
method: POST
path: "/api/v1/validate"
tags: ["Backtests"]
---

# Validate a strategy/signal before you execute (sync)

`POST /api/v1/validate`

## Request

- Base URL: `https://tradingstrategies.work`
- URL: `https://tradingstrategies.work/api/v1/validate`
- Auth: HTTP bearer

Honest, look-ahead-aware backtest validation for agentic stacks. Send a named catalog strategy (type=rules), a timestamped BUY/SELL signal list (signal_list) or a timestamped trade list (trade_list). Returns an EVIDENCE verdict — 'insufficient_evidence' | 'anecdote' | 'failed_oos' | 'passed_oos' — plus metrics, flags and caveats. NOT a buy/sell recommendation. Checks: realistic next-bar fills (look-ahead / fill-optimism), net of cost, out-of-sample split, and a hard sample gate (under 30 round-trips is always 'anecdote'). Per-endpoint quota: Pro 50/d, Power 500/d. No strategy IP is stored. [API Pro tier]

## Request body

- object
  - `strategy` object, required
    - `type` 'rules' | 'signal_list' | 'trade_list', required
    - `name` string: Catalog strategy key (type=rules).
    - `params` object
    - `signals` object[]: type=signal_list: timestamped BUY/SELL signals.
      - `ts` string, required
      - `side` 'buy' | 'sell', required
    - `trades` object[]: type=trade_list: timestamped round-trips with claimed prices.
      - `entry_ts` string, required
      - `entry_px` number, required
      - `exit_ts` string, required
      - `exit_px` number, required
      - `side` 'long' | 'short'
  - `market` object, required
    - `symbol` string, required
    - `asset_type` 'crypto' | 'tokenized_equity' | 'tokenized_etf' | 'commodities', required
    - `interval` '1d' | '2d' | '3d' | '1w' | '1M', required
  - `window` object, required
    - `from` string, date, required
    - `to` string, date
  - `costs` object
    - `fee_bps` number
  - `oos` object
    - `scheme` 'split' | 'walk_forward'
    - `split_frac` number

## Response `200`

Evidence verdict with metrics, flags and caveats.

## Other responses

- `400`: Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.
- `401`: Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.
- `403`: Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.
- `404`: Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.
- `429`: Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.
- `500`: Internal Error.
- `503`: Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).

---

[API](https://skmtc.dev/tradingstrategies/apis/backtesting-arena-public-api.md) · [All operations](https://skmtc.dev/tradingstrategies/apis/backtesting-arena-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tradingstrategies/apis/backtesting-arena-public-api/revisions/f82e8d6eecd7?raw)
