Polymarket hub

Polymarket Market Trades API

Every public fill in one market, newest first, with side, price, shares and trader.

GET /v1/polymarket/markets/{conditionId}/trades

1 credit Failed requests are free

About this endpoint

GET /v1/polymarket/markets/{conditionId}/trades returns data.trades, newest first. Each row has transactionHash, at, side (BUY or SELL), price, shares, outcome, outcomeIndex, tokenId, conditionId, a market object and a trader object with wallet, name, pseudonym and image.

Filters are side, minSize (US dollars), from and to (unix seconds), plus limit and cursor. limit is 1 to 1000 and defaults to 100. A market that exists with no trades yet returns a found answer with an empty list. An unknown condition id returns not_found.

Polymarket Market Trades API FAQ

How do I page through trades?

Read data.page.nextCursor and pass it as cursor with the same filters. Newest first means a cursor walk moves backwards in time. Stop when data.page.hasMore is false.

What does minSize filter on?

The dollar value of the trade, not the number of shares. A trade of 500 shares at 0.10 passes minSize=40. Combine it with from and to to focus on a window.

Are these fills or aggregated candles?

These are individual public fills, each with a transaction hash. For aggregated price points use the price history route. For a whole market's activity, this is the most granular route.

What does lookupStatus mean on this route?

found means the object or list was returned. not_found means no matching object exists. HTTP 200 only means the request finished, so branch on data.lookupStatus before storing a row.

How much does this route cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.