Skip to main content
Use these reads to understand where trading activity is concentrated and how traders and integrations perform over time.

Market Activity

The examples below assume you already have a market object. To find or fetch one, see Discover Markets.
Given a market, read its condition and event IDs:

Recent Trades

Review the trades recently matched in a market, including their side, price, size, outcome, wallet, and timestamp. Trades are always returned in descending timestamp order (newest first).
Call listTrades() on a PublicClient or SecureClient.

Open Interest

Measure the value currently held in outstanding positions for one or more markets.
Call fetchOpenInterest() on a PublicClient or SecureClient. Pass up to 20 condition IDs, or omit conditionIds for the single global figure (served as conditionId: null).

Market Holders

Find the largest public holders for each outcome in a market.
Call listMarketHolders() on a PublicClient or SecureClient and walk the cursor pages. pageSize applies separately to each outcome token, so merge groups by assetId across pages. Set includePnl: true (one condition ID, page size at most 100) to add position economics to every holder row.

Event Live Volume

Summarize activity across an event and break the volume down by market.
Call fetchEventLiveVolume() on a PublicClient or SecureClient. Pass one or more event IDs; a list spans events and returns one combined result.

Market Resolution

Check a market’s resolution progress.
Call fetchResolutions() on an existing PublicClient or SecureClient. If needed, create a Public Client first.
Each row includes its status and lastUpdatedAt. payouts is present when published. No matching resolution returns an empty array.For UMA question lifecycle rows, transactionHash identifies the latest lifecycle transaction, while logIndex is the initial RequestPrice event’s log index. They can belong to different transactions. Do not combine them as a log locator.This rule does not apply uniformly to every row. V2 condition-only rows can return null for both fields. CTF condition-resolution fallback rows instead carry the paired transaction and log index of the condition-resolution event.Settlement estimates use these optional fields on Resolution:expectedSettlementTime is an ISO datetime string in UTC. The fields are omitted when no estimate is available. Import ResolutionSettlementTimeBasis from @polymarket/client to interpret the estimate:

Settlement Estimates

Treat an estimate as the earliest time the market can settle, not as a deadline. A disputed vote can roll into a later voting round, and a proposal’s liveness window can already have elapsed while it awaits finalization. No estimate is available for settled markets, proposals under extended review, or markets that are still initialized or active.

Token Lookup

Find the market and outcome for a token, or list all tokens of a condition in one read.
Call fetchTokenReferences() on an existing PublicClient or SecureClient. If needed, create a Public Client first.
TokenReference Type
finalPrice is the settled payout as a decimal string, or null when unavailable. Settlement data can take up to a minute to update.To look up a condition instead, supply only conditionIds:
Pass up to 50 assetIds or 10 conditionIds, not both. Results are not paginated. Unknown asset IDs are omitted.

Trader Leaderboard

Compare trader volume and profit and loss over a selected period.
Call listTraderLeaderboard() on a PublicClient or SecureClient. window defaults to one day, category to overall, and sortBy to PnL. Tied traders share a rank and the next rank skips.
Call fetchTraderLeaderboardStanding() on a PublicClient or SecureClient to read one wallet’s standing on both boards.
When called on a SecureClient, user can be omitted and defaults to the authenticated account’s wallet.
A null rank means the wallet is unranked on that board.

Biggest Winners

Compare individual winning positions by their profit at resolution.
Call listBiggestWinners() on a PublicClient or SecureClient.
window selects the resolution period. Each row is one position. Check kind before using eventId, which is null for Combos.

Builder Analytics

Evaluate the reach of a builder integration through its attributed trading activity.

Builder Leaderboard

Compare builders by attributed volume and active users.
Call listBuilderLeaderboard() on a PublicClient or SecureClient.

Builder Volume

Track attributed builder volume and active users over time.
Call fetchBuilderVolume() on a PublicClient or SecureClient. interval picks the bucket width and bucketLimit counts the most recent complete buckets (at most 90); every builder active in a bucket gets one row.