---
title: "Backtest Reconcile"
method: POST
path: "/v1/backtest-reconcile-v1"
tags: ["finance"]
---

# Backtest Reconcile

`POST /v1/backtest-reconcile-v1`

## Request

- Base URL: `https://agent.pocket.network`
- URL: `https://agent.pocket.network/v1/backtest-reconcile-v1`
- Auth: none required

Do the claimed backtest numbers follow from the trades? Send a TradingView "List of trades" CSV or a JSON trade list with the claimed metrics; get net profit, win rate, profit factor, drawdown and per-trade P&L recomputed, each claim marked MATCH or MISMATCH, and findings such as cost-free backtests. Deterministic, no market data. POST /v1/reconcile.

## Request body

- object: The body of POST /v1/reconcile, up to 2 MiB. Send trades_csv or trades.
  - `trades_csv` string: A TradingView Strategy Tester "List of trades" CSV export.
  - `trades` object[]: The trades as a JSON list, in place of trades_csv.
    - `n` unknown
    - `side` 'long' | 'short'
    - `entry_time` string
    - `exit_time` string
    - `entry_price` number
    - `exit_price` number
    - `qty` number
    - `commission` number
    - `reported_pnl` number
  - `initial_capital` number: Starting capital for the percentage figures.
  - `commission` object: Commission applied to every trade.
    - `type` 'percent' | 'per_contract' | 'cash_per_order'
    - `value` number
  - `claimed` object: The claimed metrics to check, any of net_profit, net_profit_pct, gross_profit, gross_loss, total_trades, win_rate, profit_factor, max_drawdown, max_drawdown_pct, avg_trade, largest_win, largest_loss.
  - `tolerance_pct` number: How far a claim may differ, in percent, and still MATCH.
  - `single_position` boolean: Flag overlapping trades.

## Response `200`

The upstream response, served after payment settles.

- object: POST /v1/reconcile answers a backtest-reconcile/v1 object: verdict, the recomputed metrics, each claim with claimed, recomputed, diff and status, findings with code and severity, counts, and the assumptions used. Properties are pinned from live paid responses; nothing is required, because every route's 2xx response is validated against this one schema.
  - `schema` string
  - `service` string
  - `version` string
  - `verdict` string
  - `recomputed` object
    - `net_profit` number
    - `net_profit_pct` number
    - `gross_profit` number
    - `gross_loss` number
    - `total_trades` number
    - `win_rate` number
    - `profit_factor` unknown
    - `max_drawdown` number
    - `max_drawdown_pct` number
    - `avg_trade` number
    - `largest_win` number
    - `largest_loss` number
    - `total_commission` number
  - `claims` object[]
    - `metric` string
    - `claimed` number
    - `recomputed` number
    - `diff` number
    - `status` string
  - `findings` object[]
    - `code` string
    - `severity` string
    - `message` string
    - `trade` number
    - `reported` number
    - `recomputed` number
    - `metric` string
  - `counts` object
    - `error` number
    - `warning` number
    - `info` number
  - `assumptions` object
    - `commission` unknown
    - `initial_capital` number
    - `tolerance_pct` number
    - `equity` string
  - `notes` unknown[]
    - unknown
  - `scope` string

## Other responses

- `400`: Malformed request.
- `402`: Payment required. The x402 v2 terms are in the PAYMENT-REQUIRED header and, identically, in this body; sign the chosen option and retry with the PAYMENT-SIGNATURE header. The receipt arrives in PAYMENT-RESPONSE.
- `503`: This service is not currently available to serve.

---

[API](https://skmtc.dev/pocket/apis/pocket-agentic-portal.md) · [All operations](https://skmtc.dev/pocket/apis/pocket-agentic-portal/llms.txt) · [OpenAPI document](https://skmtc.dev/pocket/apis/pocket-agentic-portal/revisions/96d2176db014?raw)
