# Pre trade analysis

<div class="api-grid" markdown>
<div class="api-main" markdown>

<span class="api-method api-method--get">GET</span> <span class="api-url">`https://api.pro.anboto.xyz/api/v2/data/preTradeAnalysis`</span>

Market impact of an order before it is placed, computed from Anboto's live market snapshot (the same analysis as the trading UI): participation in the 5m volume and in the order book, impact tier LOW / MEDIUM / HIGH for TWAP / VWAP / IS at the given duration, the shortest low / medium impact durations, sweep price, slippage and share of the 24h volume. For POV, give `povRatio`: the impact tier at that participation, the estimated time to fill and the low / medium / high participation presets (`pov`). `cost_estimate` gives the expected slippage, price move and market risk from a market-impact model (uncalibrated estimate). `supported: false` with `missing` explains when the venue or symbol cannot be analysed (e.g. `exchange_not_supported`, `timeout`); `market` and `execution` are then null when no snapshot could be read or it is stale. The first call for a symbol can take a few seconds while the snapshot is built; later calls are immediate. **ApiKeyAuth** required.

### Query params

<div class="api-params" markdown>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`exchange` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">Exchange, e.g. binance, bybit, okx</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`assetClass` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">Asset class: spot or future</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`symbol` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">Anboto symbol, e.g. BTC/USDT:USDT</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`quantity` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">Order quantity in base units (coins)</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`strategy` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">Strategy: twap, vwap, is, pov, iceberg, limit, market…</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`side` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">buy or sell; needed for the sweep price and slippage</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`durationSeconds` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">Execution duration in seconds (TWAP / VWAP / IS)</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`povRatio` <span class="api-param__type">string</span></div>
<div class="api-param__desc" markdown="span">POV participation in percent of market volume, 0.01 to 33; required for pov</div>
</div>
</div>

### Headers

| Header | | |
|---|---|---|
| `X-API-KEY` | string | <span class="api-req">required</span> |
| `X-TIMESTAMP` | int64 ms | <span class="api-req">required</span> |
| `X-SIGN` | string | <span class="api-req">required</span> |
| `X-RECV-WINDOW` | int, default 5000 | |

### Responses

| | |
|---|---|
| <span class="api-status api-status--ok">200</span> | The analysis. |
| <span class="api-status api-status--err">400</span> | Invalid parameter |
| <span class="api-status api-status--err">401</span> | Unauthorized: missing or unknown API key |
| <span class="api-status api-status--err">429</span> | Rate limit exceeded, retry later |
| <span class="api-status api-status--err">503</span> | Pre-trade analysis is not available on this deployment |

### Response fields — [PreTradeAnalysis](schemas.md#pretradeanalysis)

<div class="api-params" markdown>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`supported` <span class="api-param__type">boolean</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">False when the venue or symbol cannot be analysed; see missing</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`missing` <span class="api-param__type">array[string]</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Inputs that could not be sourced (e.g. deep_book, ohlcv_1m) or why the analysis is unavailable (disabled, exchange_not_supported, timeout, rejected, error, stale)</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`snapshot_timestamp` <span class="api-param__type">integer</span></div>
<div class="api-param__desc" markdown="span">Epoch ms of the market snapshot used; null when no snapshot could be read (disabled, exchange_not_supported, timeout, rejected, error)</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`market` <span class="api-param__type">object</span></div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`impact` <span class="api-param__type">[PreTradeImpact](schemas.md#pretradeimpact)</span></div>
<div class="api-param__desc" markdown="span">Participation and impact tier at the requested duration</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`impact.tier` <span class="api-param__type">enum</span></div>
<div class="api-param__desc" markdown="span">Null when no duration was given — `LOW`, `MEDIUM`, `HIGH`</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`impact.duration_seconds` <span class="api-param__type">integer</span></div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`impact.volume_participation_pct` <span class="api-param__type">number</span></div>
<div class="api-param__desc" markdown="span">Percent of the median 5-minute volume</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`impact.order_book_participation_pct` <span class="api-param__type">number</span></div>
<div class="api-param__desc" markdown="span">Percent of the book depth within 20 bps, per minute</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`impact.book_safe` <span class="api-param__type">boolean</span></div>
<div class="api-param__desc" markdown="span">The book depth can absorb the flow</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`impact.model` <span class="api-param__type">[PreTradeImpactModel](schemas.md#pretradeimpactmodel)</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Participation at a reference duration; pct(D) = pct × reference_duration_seconds / D. Volume participation above medium_pct is MEDIUM and above high_pct is HIGH, with the low order book thresholds while the order book participation is below low_order_book_participation_pct</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`execution` <span class="api-param__type">object</span></div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`advice` <span class="api-param__type">[PreTradeAdvice](schemas.md#pretradeadvice)</span></div>
<div class="api-param__desc" markdown="span">Advised durations, on Anboto's duration ladder</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`advice.safe_duration_seconds` <span class="api-param__type">integer</span></div>
<div class="api-param__desc" markdown="span">Shortest duration rated LOW</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`advice.moderate_duration_seconds` <span class="api-param__type">integer</span></div>
<div class="api-param__desc" markdown="span">Shortest duration rated MEDIUM or better</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov` <span class="api-param__type">[PreTradePov](schemas.md#pretradepov)</span></div>
<div class="api-param__desc" markdown="span">POV model. At a participation p the order trades k = p / (1 - 2p) of everyone else's volume, because the engine counts its own fills. The impact tier depends on p alone: pace_vs_market_pct above medium_pct is MEDIUM, above high_pct is HIGH, whatever the book depth. The quantity only sets the time to fill.</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.pov_ratio_pct` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Requested participation, percent of market volume</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.pace_vs_market_pct` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Order flow as a share of the rest of the market (k)</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.share_of_total_pct` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Order flow as a share of all market volume, own fills included</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.estimated_fill_seconds` <span class="api-param__type">integer</span></div>
<div class="api-param__desc" markdown="span">Time to fill the quantity if market volume stays at its recent median 5-minute volume. An estimate only: POV speeds up when volume rises and slows down when it falls; passive and hybrid styles, or a limit price, can be slower</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.estimated_fill_seconds_24h` <span class="api-param__type">integer</span></div>
<div class="api-param__desc" markdown="span">Same at the 24h average volume</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.thresholds` <span class="api-param__type">[PreTradeThresholds](schemas.md#pretradethresholds)</span> <span class="api-req">required</span></div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.safe_pov_pct` <span class="api-param__type">number</span></div>
<div class="api-param__desc" markdown="span">Largest ladder participation rated LOW</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.moderate_pov_pct` <span class="api-param__type">number</span></div>
<div class="api-param__desc" markdown="span">Largest ladder participation rated MEDIUM or better</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`pov.high_pov_pct` <span class="api-param__type">number</span></div>
<div class="api-param__desc" markdown="span">Smallest ladder participation rated HIGH</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate` <span class="api-param__type">[PreTradeCostEstimate](schemas.md#pretradecostestimate)</span></div>
<div class="api-param__desc" markdown="span">Expected execution cost from a market-impact model (Almgren, Thum, Hauptmann and Li, 2005) with its published coefficients, in basis points of the arrival price. Assumes normal liquidity: market makers refill the book and nobody trades heavily against the order. calibrated is false until the coefficients are fitted on Anboto fills.</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.slippage_bps` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Expected average execution price against arrival</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.price_move_bps` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Expected price move by the end of the execution</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.permanent_bps` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Part of the move expected to remain after the order</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.market_risk_bps` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">One standard deviation of the market's own move over the execution time</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.horizon_seconds` <span class="api-param__type">integer</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Execution time assumed: the duration, or the POV time to fill</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.pace_pct` <span class="api-param__type">number</span> <span class="api-req">required</span></div>
<div class="api-param__desc" markdown="span">Order flow as a share of the rest of the market</div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.model` <span class="api-param__type">string</span> <span class="api-req">required</span></div>
</div>
<div class="api-param" markdown>
<div class="api-param__head" markdown="span">`cost_estimate.calibrated` <span class="api-param__type">boolean</span> <span class="api-req">required</span></div>
</div>
</div>

</div>
<div class="api-code" markdown>

=== "Shell"

    ```bash
    curl -X GET "$BASE/api/v2/data/preTradeAnalysis?exchange=string" \
      -H "X-API-KEY: $API_KEY" -H "X-TIMESTAMP: $ts" \
      -H "X-SIGN: $sign"
    ```

=== "Python"

    ```python
    params = {"exchange": ..., "assetClass": ..., "symbol": ..., "quantity": ..., "strategy": ..., "side": ..., "durationSeconds": ..., "povRatio": ...}
    r = requests.get(f"{BASE}/api/v2/data/preTradeAnalysis",
        params=params
        headers=signed_headers_query(params))
    print(r.json())
    ```

=== "Rust"

    ```rust
    let resp = client
        .get(format!("{BASE}/api/v2/data/preTradeAnalysis?exchange=string"))
        .headers(signed_headers_query(&params))
        .send()?;
    println!("{}", resp.text()?);
    ```

=== "Go"

    ```go
    req, _ := http.NewRequest("GET", BASE+"/api/v2/data/preTradeAnalysis?exchange=string", nil)
    for k, v := range signedHeadersQuery(req.URL.Query()) {
    	req.Header.Set(k, v)
    }
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
    	log.Fatal(err)
    }
    defer resp.Body.Close()
    io.Copy(os.Stdout, resp.Body)
    ```

=== "Java"

    ```java
    HttpResponse<String> resp = client.send(
        signedGet("/api/v2/data/preTradeAnalysis?exchange=string"),
        HttpResponse.BodyHandlers.ofString());
    ```

=== "TypeScript"

    ```typescript
    const res = await fetch(`${BASE}/api/v2/data/preTradeAnalysis?exchange=string`, {
      method: "GET",
      headers: signedHeadersQuery(params),
    });
    const data: PreTradeAnalysis = await res.json();
    ```

=== "Kotlin"

    ```kotlin
    val request = signedGet("/api/v2/data/preTradeAnalysis?exchange=string")
    val response = client.send(request, HttpResponse.BodyHandlers.ofString())
    println(response.body())
    ```

=== "C++"

    ```cpp
    cpr::Response r = cpr::Get(
        cpr::Url{BASE + "/api/v2/data/preTradeAnalysis?exchange=string"},
        signedHeadersQuery(params));
    std::cout << r.text << std::endl;
    ```

=== "JavaScript"

    ```javascript
    const res = await fetch(`${BASE}/api/v2/data/preTradeAnalysis?exchange=string`, {
      method: "GET",
      headers: signedHeadersQuery(params),
    });
    console.log(await res.json());
    ```

<div class="api-response" markdown>

**Response** <span class="api-status api-status--ok">200</span>

```json
{
  "supported": true,
  "missing": [
    "string"
  ],
  "snapshot_timestamp": 0,
  "market": "string",
  "impact": {
    "tier": "LOW",
    "duration_seconds": 0,
    "volume_participation_pct": 0.0,
    "order_book_participation_pct": 0.0,
    "book_safe": true,
    "model": {
      "reference_duration_seconds": 0,
      "volume_participation_pct": 0.0,
      "order_book_participation_pct": 0.0,
      "low_order_book_participation_pct": 0.0,
      "thresholds_low_order_book": {
        "medium_pct": 0.0,
        "high_pct": 0.0
      },
      "thresholds_high_order_book": {
        "medium_pct": 0.0,
        "high_pct": 0.0
      }
    }
  },
  "execution": "string",
  "advice": {
    "safe_duration_seconds": 0,
    "moderate_duration_seconds": 0
  },
  "pov": {
    "pov_ratio_pct": 0.0,
    "pace_vs_market_pct": 0.0,
    "share_of_total_pct": 0.0,
    "estimated_fill_seconds": 0,
    "estimated_fill_seconds_24h": 0,
    "thresholds": {
      "medium_pct": 0.0,
      "high_pct": 0.0
    },
    "safe_pov_pct": 0.0,
    "moderate_pov_pct": 0.0,
    "high_pov_pct": 0.0
  },
  "cost_estimate": {
    "slippage_bps": 0.0,
    "price_move_bps": 0.0,
    "permanent_bps": 0.0,
    "market_risk_bps": 0.0,
    "horizon_seconds": 0,
    "pace_pct": 0.0,
    "model": "string",
    "calibrated": true
  }
}
```

</div>
</div>
</div>
