---
title: "Backtested cross-venue spreads"
method: GET
path: "/api/v1/spreads/backtest"
tags: ["Spreads"]
---

# Backtested cross-venue spreads

`GET /api/v1/spreads/backtest`

## Request

- Base URL: `https://arbitron.app`
- URL: `https://arbitron.app/api/v1/spreads/backtest`
- Auth: HTTP bearer

The public scanner's ranked spreads, priced against real order-book depth for an order of `size_usd` over the scan window. `est_profit_pct` is per round trip after fees; `cycles` counts how often the spread opened and closed. `strategy_url` opens a new strategy on the pair in the terminal, coin and both venues filled in.

A backtest, not the live print: use `/spreads` for what the spread is right now. The Demo plan withholds the five best rows of every venue (on either leg) whatever the filter. `withheld_top` is the number withheld from the whole snapshot, the same whatever the filter, and the cursor stops after 100 rows. Paid plans see every row.

## Query parameters

- `size_usd` integer
- `coin` string
- `exchange` string
- `exchange_match` string
- `exclude_exchange` string
- `min_profit_pct` number, double
- `max_profit_pct` number, double
- `min_avg_profit_pct` number, double
- `min_cycles` integer
- `min_confidence` integer
- `min_volume_usdt` number, double
- `active_within_hours` integer
- `sort` string
- `limit` integer
- `cursor` string
- `fields` string

## Response `200`

OK

- ApiEnvelopeOfSpreadBacktestResponse
  - `data` SpreadBacktestResponse, required
    - `size_usd` integer, required
    - `withheld_top` integer, required
    - `spreads` SpreadBacktestItem[], required
      - `symbol` string, required
      - `coin` string, required
      - `exchange_a` string, required
      - `exchange_b` string, required
      - `est_profit_pct` number, double, required
      - `avg_profit_pct` number, double, required
      - `fee_pct_cycle` number, double, required
      - `spread_range_pct` number, double, required
      - `cycles` integer, required
      - `confidence` integer, required
      - `volume_a_usdt` number, double, required
      - `volume_b_usdt` number, double, required
      - `last_cycle_at` string, date-time, nullable, required
      - `strategy_url` string, nullable
  - `meta` ApiMeta, required
    - `as_of` string, date-time, required
    - `delayed_seconds` integer, required
    - `source` string, required
    - `url` string, required
    - `count` integer, nullable
    - `total` integer, nullable
    - `next_cursor` string, nullable
    - `withheld` integer, nullable

## Other responses

- `400`: Bad Request

---

[API](https://skmtc.dev/arbitron/apis/arbitron-api.md) · [All operations](https://skmtc.dev/arbitron/apis/arbitron-api/llms.txt) · [OpenAPI document](https://skmtc.dev/arbitron/apis/arbitron-api/revisions/dd08806fd48e?raw)
