---
title: "Run dataset: trades (run_id comes from GET /v1/backtests/{id})"
method: GET
path: "/v1/runs/{runId}/trades"
---

# Run dataset: trades (run_id comes from GET /v1/backtests/{id})

`GET /v1/runs/{runId}/trades`

## Request

- Base URL: `https://app.texttoquant.com/api`
- URL: `https://app.texttoquant.com/api/v1/runs/{runId}/trades`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

The numbers behind a finished run. Requires the `resultsHistory` plan feature. The same data is served to the app at `/api/runs/{runId}/trades` under a session JWT; this is the key-authed mirror. Page with `offset`+`limit`, or ask for `maxPoints` to get an even downsample of the WHOLE range in one call. Each element is one closed trade. Runs saved since 2026-09-14 also carry `entryRegimePostHoc` / `exitRegimePostHoc`: the price action block at the entry / exit bar (1 Trend Up, -1 Trend Down, 0 Quiet Range, 2 Volatile Chop). POST HOC: classified with confirmed pivots, i.e. with bars after the trade opened; not knowable at entry; attribution and display only; never a signal. null = the classifier saw the bar and left it unlabelled; a missing key = never computed (older run): fall back to metrics.regimeBreakdown.segments, never read a missing key as "unclassified".

## Path parameters

- `runId` string, uuid, required

## Query parameters

- `start` string, date-time
- `end` string, date-time
- `limit` integer
- `maxPoints` integer
- `offset` integer
- `raw` '1'

## Response `200`

Success

- object
  - `success` true, required
  - `data` object, required

## Other responses

- `403`: plan_feature_required (resultsHistory)
- `404`: not_found (run not owned or expired)

---

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