Get 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.
Authorizations
UUID of your API key (from Settings → API Keys).
Current unix seconds. Must be within 30s of server time.
Base64 Ed25519 signature over the canonical request: METHOD\nPATH\nSORTED_QUERY\nTIMESTAMP\nSHA256(body) hex. See /api-reference/authentication for the full recipe.
Query Parameters
River market IDs (repeat the param for each)
Max trades returned per market
1 <= x <= 200Response
Successful Response
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.

