> ## Documentation Index
> Fetch the complete documentation index at: https://docs.0xinsider.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> The Markdown of an API reference page leaves out the OpenAPI schema.
> Every object an endpoint returns or a webhook carries, with each field's type, presence and meaning, is on https://docs.0xinsider.com/api-reference/objects.md.
> The full OpenAPI 3.1 spec names each operation's and each webhook's exact parameters, request body and response schema: https://docs.0xinsider.com/api-reference/openapi.json.

# List market trades

> List one market's taker fills of $100 or more between two times, newest first, each fill once.

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](https://docs.0xinsider.com/api-reference/endpoint/get-large-trades-history.md) with `condition_id`.

Every plan with an API key can read it. Each request costs 1.

## Parameters

| Parameter | Meaning |
| - | - |
| `condition_id` | Required, in the path. The market's raw `condition_id`, or the `mkt_` id other responses carry. A market outside sports and esports is a `404` with `error.reason` `market_out_of_scope`. |
| `from` | Optional. An RFC 3339 time. The page holds fills at or after it. Without it, or with a time before `coverage.recorded_from`, the walk runs back to `coverage.recorded_from`. |
| `to` | Optional. An RFC 3339 time. The page holds fills before it. A first page also stops at `coverage.complete_through`. `from` must be before `to`, or the read is a `400` with `error.param` `from`. |
| `limit` | Optional. How many fills to return, from 1 to 500. The default is 100, and a value outside the range is clamped. |
| `cursor` | Optional. The `next_cursor` value from an earlier response. It keeps the market, `from`, and `to` it was issued for, so you can send it alone. If you send `from` or `to` with it, they must match the cursor's, or the read is a `400` with `error.reason` `cursor_expired`. |

## Key response fields

| Field | Meaning |
| - | - |
| `data[]` | The fills, newest first by `traded_at`, then `transaction_hash`, then `log_index`. |
| `data[].id` | `{transaction_hash}:{log_index}`: one fill event. Use it to drop a fill you already have. |
| `data[].traded_at` | The fill's block time, to the second. |
| `data[].side` | The taker's side: `BUY` took outcome shares and `SELL` gave them. |
| `data[].outcome`, `outcome_index`, `token_id` | The outcome traded: its label, `0` for the first (Yes) token or `1` for the second (No), and the token's id. |
| `data[].price`, `shares`, `size_usd` | The fill's price per share from 0 to 1, the shares filled, and its USDC value. |
| `data[].taker` | The taker's wallet, in lowercase. |
| `data[].transaction_hash`, `log_index` | The fill's transaction and the log index of its fill event. |
| `coverage.min_size_usd` | `100`. A fill smaller than \$100 is not stored. |
| `coverage.recorded_from` | Where the record starts: the later of when we started recording fills and 00:00 UTC on the day 365 days before today. A window before it reads empty because it is outside the record, not because nothing traded. |
| `coverage.complete_through` | Every fill at or before this time is in the record. It trails the current time by a few minutes, and a first page serves no fill after it. |
| `coverage.retention_days` | `365`. A stored fill is served for at least this many days, then deleted. |
| `has_more` | `true` when older fills in the window remain. Send `next_cursor` for them. |
| `next_cursor` | The cursor for the next page, or `null` when `has_more` is `false`. |

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:

```bash theme={null}
curl -sS \
  -H "Authorization: Bearer $OXINSIDER_API_KEY" \
  'https://api.0xinsider.com/api/v1/market/0x2faf55d4e596992b4c41c565cc83c0420c74d0b8a11d34c63f6403937c72aa13/trades?from=2026-11-08T00:00:00Z&limit=500'
```

Then read the next page with the cursor alone:

```bash theme={null}
curl -sS \
  -H "Authorization: Bearer $OXINSIDER_API_KEY" \
  "https://api.0xinsider.com/api/v1/market/0x2faf55d4e596992b4c41c565cc83c0420c74d0b8a11d34c63f6403937c72aa13/trades?cursor=$NEXT_CURSOR"
```

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](https://docs.0xinsider.com/api-reference/endpoint/get-trader.md).

## 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.


## API Specification

The full API specification for this endpoint is available in the [documentation index](https://docs.0xinsider.com/llms.txt).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.