Recent trade tape for a contract
Returns the most recent individual trades for a single (provider, contract_id) pair, newest first, deduplicated by trade id. Only rows with price > 0 AND price <= 100 AND size > 0 are eligible.
Price unit: price is on the integer-cents scale 0–100 for every provider (Kalshi, Polymarket, predict.fun, Hyperliquid alike) — it is NOT a 0–1 probability and NOT already divided into dollars. Multiply size * price / 100 to get USD notional. price is returned as a float because some venues (e.g. Kalshi) report sub-penny ticks.
Window semantics: the query window is [now - window_seconds, before_or_now]. The lower bound is always computed from the current server time, not from before — passing a before older than now - window_seconds can invert the window. If the primary window yields zero rows, the handler transparently retries with an unbounded lower bound [0, before_or_now] so contracts with no recent activity still return their most recent historical trades. has_more reflects an internal over-fetch of limit + 1 rows, truncated back to limit before serialization.
Rate-limit cost (HEAVY bucket): priced by requested depth — a larger limit consumes more of your quota.
Caching: responses are cached for 3s per replica (with singleflight coalescing) to absorb duplicate concurrent requests, and the implicit now upper bound is quantized to that same 3s so the cache is usable at all. The HTTP response itself is Cache-Control: private, max-age=5 with no ETag — this route never returns 304. Responses ≥1KB are gzip-compressed when the client sends Accept-Encoding: gzip.
Request
- Base URLhttps://md.kairos.trade
- Auth
- none
- or API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret
Query parameters
Venue identifier, case-insensitive. Resolved against the central provider registry; kalshi_offchain is an alias for kalshi and dome is an alias for polymarket. opinion resolves but is a disabled provider — valid only for historic reads.
Venue-scoped contract/token identifier to fetch trades for.
Lookback window, in seconds, measured back from the current server time (not from before). Valid range [3600, 86400]; out-of-range or non-integer values are rejected with 400, not clamped.
Maximum number of trades to return, newest first. Valid range is [1, 500]; the default is also 500. Drives the rate-limit cost — see the operation description.
Upper bound of the window as a positive Unix timestamp in seconds (exclusive: trades with trade_ts < before). Omit to use the current time. Must be a positive integer or the request is rejected with 400.
Response
Trade page for the window, newest first. trades may be empty (and oldest_available_ts null) if the contract has no recorded trades at all, even after the unbounded fallback query.
Example response
{
"trades": [
{
"trade_id": "0x9f2ac3f1b0e2f4a9c8d7b6a5f4e3d2c1b0a9f8e7",
"contract_id": "0x8b1c119419f622e21fc576ec8e9c2c07b2c1b09babf0e1f3d1cb9bfc1a8f9c2",
"size": 250,
"price": 62.5,
"outcome": "Yes",
"timestamp": 1737479998.412,
"token_id": "109451234567890332112345678903321",
"metadata": "{\"maker_order_id\":\"0xabc\"}",
"taker_address": "0xabc1234567890abcdef1234567890abcdef1234",
"side": "buy"
}
],
"has_more": true,
"oldest_available_ts": 1737479950.001,
"coverage_hours": 0.01
}Changes
No recorded changes to this operation across all 1 revision of this API.