Skip to main content
GET
Trade history
Search and filter the complete history of Polymarket trades. Every CLOB fill is enriched with market metadata. Supports filtering by wallet, market (via slug, condition ID, or token ID), time range, and minimum trade size. When no filters are provided, returns the most recent trades from the last 24 hours. Add any filter to query the full history.

Request

Query parameters

Identifying markets

There are three ways to filter trades by market:
  • market_slug — the human-readable URL slug from Polymarket (e.g. will-zohran-mamdani-win-the-2025-nyc-mayoral-election). Easiest to use.
  • condition_id — the unique condition identifier for a market. Returns trades for all outcomes (Yes and No).
  • token_id — the specific outcome token. Returns trades for only that outcome.
You can combine market filters with wallet to find a specific wallet’s trades on a specific market.

Response

Trade fields

Direction & side semantics

direction and side answer two different questions and are always populated:
  • direction ("BUY" or "SELL") — what the subject of the row did, economically. They contributed USDC and received outcome shares (BUY) or contributed outcome shares and received USDC (SELL).
  • side ("maker" or "taker") — the subject’s role on the fill. The maker placed a resting limit order; the taker aggressed the spread.
The “subject” of the row depends on the filter: This means a row from a wallet-filtered query and the same row from a market-wide query may report different direction values — both are correct, just anchored on different parties (the queried wallet vs. the maker).

Pagination fields

Examples

Recent trades

Returns the most recent trades from the last 24 hours.

Filter by wallet

Returns all trades where the wallet was either maker or taker. The side field indicates which role the wallet played.

Filter by market

Use market_slug to get all trades on a specific market across all wallets.
You can also filter by condition_id to get both outcomes of a market:

Large trades

Use min_total to find trades above a USD threshold.

Time range

Use start_time and end_time (Unix timestamps) to query a specific window.

Combined filters

Combine any filters. For example, a wallet’s trades on a specific market:

Pagination

Pass the pagination_key from the previous response to get the next page.

Sort by order

Use sort_by=order_hash to cluster fills from the same limit order together. A single limit order can be filled across many transactions over time. This sort groups all those partial fills adjacently, sorted by timestamp within each order. Orders are ranked by their most recent fill. Every fill is still returned individually with all fields. No data is collapsed or aggregated.

Group by order

Use group_by=order_hash to aggregate all fills from the same limit order into a single row. Each row contains summed totals, a VWAP price, fill count, time range, and a list of transaction hashes.

Grouped trade fields

Oldest first

Use order=asc to get trades in chronological order. Requires at least one filter.

Error responses

Notes

  • Without filters, defaults to the last 24 hours for performance. Add start_time to query further back.
  • The side field is only included when filtering by wallet. Without a wallet filter, there is no perspective to assign a side from.
  • Market metadata (market, market_slug, outcome, condition_id, image) is enriched from our index. Very old or delisted markets may not have metadata.
  • Results are sourced from onchain settlement data. Every fill that settled on Polygon is included.

Query Parameters

wallet
string

Filter by wallet address (matches both maker and taker sides)

market_slug
string

Filter by market slug

condition_id
string

Filter by condition ID

token_id
string

Filter by outcome token ID

start_time
integer

Unix timestamp — only return trades after this time

end_time
integer

Unix timestamp — only return trades before this time

min_total
number

Minimum trade size in USD

limit
integer
default:100

Results per page (1-500, default 100)

Required range: 1 <= x <= 500
order
enum<string>
default:desc

Sort direction. asc requires at least one filter.

Available options:
desc,
asc
pagination_key
string

Cursor from a previous response to fetch the next page

Response

Trade results with pagination