---
title: "Get Tradeprints"
method: GET
path: "/v1/tradeprints"
tags: ["tradeprints"]
---

# Get Tradeprints

`GET /v1/tradeprints`

Return the most recent trades for one or more markets, sourced directly from
the exchanges. Markets are fetched concurrently with a small semaphore
(`MAX_CONCURRENT_FETCHES`) so a long input list never fans out into a
thundering herd, and the result list preserves the input order. A failure
on any single market becomes a `not_found` row with a message — the call as
a whole does not 500.

Per-market lookup paths:
  - Kalshi: `GET /markets/trades?ticker=...&limit=...`
  - Polymarket: `GET https://data-api.polymarket.com/trades?market=<token>&limit=...`
    (both YES and NO legs are fetched and the NO leg is flipped into YES-price terms)

Trades are sorted newest-first within each market. Prices are normalised to 0-1.

Use this together with the `/v1/ws/tradeprints` WebSocket: hit this endpoint to
backfill the tape on page load, then dedup live WS events by `exchange_trade_id`.

## Query parameters

- `river_ids` integer[], required — River market IDs (repeat the param for each)
- `limit` integer — Max trades returned per market

## Response `200`

Successful Response

- TradeprintsBulkResponse — Response for `GET /v1/tradeprints?river_ids=...`. `results` preserves the order of the requested `river_ids`. Partial failures are surfaced per-row (status `not_found`) with a `message` — a bad river_id or upstream error never aborts the whole call.
  - `results` TradeprintsResponse[]
    - `status` 'ok' | 'pending' | 'not_found', required
    - `river_id` integer, nullable
    - `trades` TradeprintEvent[]
      - `exchange_timestamp` string, date-time, nullable — Exchange-reported trade timestamp (UTC)
      - `price` number, required
      - `qty` number, required
      - `aggressor_buy_flag` boolean, nullable
      - `exchange_trade_id` string, nullable — Exchange-assigned trade id. Used by clients to dedup overlap between REST backfill and WS live stream.
    - `message` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/rivermarkets/apis/river-finance-api.md) · [All operations](https://skmtc.net/rivermarkets/apis/river-finance-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/rivermarkets/river-finance-api/revisions/3776a0431319/schema)
