Skip to main content
GET
cURL
Use this endpoint to read every trade of $100 or more on one market in a time window, for a backtest, a volume check, or to follow a market as it trades. Each fill is listed once, keyed by its transaction and log index, so you can join it to the chain. For only the large trades, with wallet grades and review scores, use Large trades history with condition_id. Every plan with an API key can read it. Each request costs 1.

Parameters

Key response fields

To follow a market, read again later with from set to the last complete_through you read, and drop fills whose id you already have. If a read misses our 200 ms read deadline, the response is a 503 with error.reason read_model_warming and Retry-After: 1. Send the same request again after it.

Example

Every fill of $100 or more on one market since 00:00 UTC on November 8, 2026, 500 at a time:
Then read the next page with the cursor alone:
The get_market_trades MCP tool calls this endpoint with the same parameters. The CLI command 0xinsider market trades <condition_id> and the TypeScript SDK’s listMarketTrades() arrive in their next releases.

What it does not return

  • Fills smaller than $100.
  • Fills before coverage.recorded_from. Recording began about 7 days before this endpoint launched, so older history is not available. From November 2027, a fill is deleted once it is older than coverage.retention_days, and recorded_from moves forward one day at a time.
  • The maker side of a fill. Each fill appears once, from the taker’s side.
  • Fills newer than coverage.complete_through. Read again later for them.
  • Wallet names or grades. Look a wallet up with Get trader.

Caching

The response carries a weak semantic ETag. Send it back as If-None-Match for a 304 with an empty body. request_id and cost are excluded from the validator.

Authorizations

Authorization
string
header
required

Legacy default or named integration API key, or OAuth 2.1 access token, in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Default keys retain full access; integration keys are limited to their approved read, webhooks, export and usage scopes and expire within 90 days. All credentials share the owner's account limits. Data calls require an active Pro subscription and return live data. A 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.0xinsider.com/.well-known/oauth-protected-resource" (RFC 6750 section 3, RFC 9728).

Headers

X-Query-Validation
enum<string>

Opt into strict query-name validation. The default is compatible: unknown names are ignored and reported in X-Query-Ignored. With strict, an unknown name returns 400 bad_request with error.reason unknown_query_parameter before the handler runs, including when its percent escape is incomplete.

Available options:
strict
If-None-Match
string

Conditional GET using a weak semantic ETag from an earlier response. A matching payload returns 304 with an empty body; request_id and cost are excluded from the validator.

Path Parameters

condition_id
string
required

Market condition ID. Accepts the raw provider-backed condition_id returned by /api/v1/markets/search or /api/v1/markets/explore, or the mkt_-prefixed market.id emitted by V1 responses.

Query Parameters

from
string<date-time>

Inclusive RFC 3339 lower bound on traded_at. Omitted or earlier than coverage.recorded_from: the walk runs to the start of the record (coverage.recorded_from). With cursor, it must match the cursor's.

to
string<date-time>

Exclusive RFC 3339 upper bound on traded_at. A first page ends at the earlier of to and coverage.complete_through. With cursor, it must match the cursor's.

limit
integer
default:100

Page size. Out-of-range values are clamped to 1..500.

Required range: 1 <= x <= 500
cursor
string

Opaque mtr_v1_ cursor from next_cursor. It continues the walk before the last fill of the previous page and keeps the market, from and to it was issued for: another market, or a from or to that differs from the cursor's, answers 400 with error.reason cursor_expired. A cursor this endpoint did not issue returns 400 with error.param=cursor.

Response

One page of a market's recorded taker fills

object
string
required
Allowed value: "list"
data
object[]
required

Newest first by traded_at, then transaction_hash, then log_index.

has_more
boolean
required

True when older fills in the window remain: send next_cursor for them.

next_cursor
string | null
required

Opaque mtr_v1_ cursor for the next page; null when has_more is false.

condition_id
string
required

The market's raw condition_id, lowercase.

coverage
object
required

What the record holds. A window outside it reads empty because it is outside the record, not because nothing traded.

meta
object
required