Prediction markets API

Every market one prediction-market trader traded, and how they did on each

One trader's track record market by market, ranked by volume, realized PnL or activity, with the position, entry price, PnL and win or loss per outcome.

GET/api/external/prediction/prediction-trader-markets/{id}

What it returns

One row per market the trader traded, ranked by sort_by, with the market itself, their totals on it and a per-outcome breakdown (position, entry price, realized and unrealized PnL). The id is a traderId from prediction-trades or prediction-market-traders rows — copy it as given rather than building one; only venues that settle on-chain have trader ids. The trader's profile and lifetime totals are not repeated here: prediction-trader has them. Page with offset. There is no total: a page shorter than limit is the last one, and an offset past the end, like an unknown id, answers an empty items. isWinningOutcome is set only once the market has resolved.

Chains

This endpoint is not tied to a chain: it takes no chain in its request.

Request

Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.

curl -H "x-dex-data-key: $DEXDATA_API_KEY" \
  "https://api.dexdata.io/api/external/prediction/prediction-trader-markets/<id>"
Parameters
ParameterDescription
sort_by

query · string · optional

Which figure to rank the trader's markets by. Defaults to USD volume.volumeUsdrealizedPnlUsdtradeslastTradeTimestampprofitPerTradeUsd
sort_type

query · string · optional

Sort direction. Defaults to descending.ASCDESC
limit

query · integer · optional

How many rows to return. Defaults to 20; this endpoint caps it at 100.
offset

query · integer · optional

0-based row offset, for paging through the ranking. At most 1000000.
id

path · string · required

A prediction-market trader id, e.g. "<walletAddress>:Polymarket", as traderId in prediction-trades and prediction-market-traders rows — not a bare wallet address, and not scoped to any chain this API otherwise supports.

Response fields

A JSON response. Every field is always present; null means the value could not be established, never zero.

Response fields of Every market one prediction-market trader traded, and how they did on each
FieldTypeDescription
itemsobject[]
items[].marketIdstring | nullThe market's id, as prediction-market and prediction-market-traders take it.
items[].questionstring | nullThe market's question.
items[].labelstring | nullThe market's short name inside its event, e.g. 25 bps decrease. Null when it has none.
items[].eventIdstring | nullThe event the market belongs to, as prediction-event takes it.
items[].eventLabelstring | nullThe event's name.
items[].statusstring | nullThe market's status, e.g. OPEN, RESOLVED. Open set: other values can appear.
items[].closesAtnumber | nullWhen the market closes to trading, Unix seconds.
items[].resolvedAtnumber | nullWhen the market resolved, Unix seconds. Null while it has not.
items[].hasOpenPositionboolean | nullWhether the trader still holds shares on this market.
items[].realizedPnlUsdnumber | nullThe trader's realized PnL on this market, USD. A real 0 is possible.
items[].unrealizedPnlUsdnumber | nullUnrealized PnL on the open position, USD.
items[].currentPositionValueUsdnumber | nullWhat the shares held now are worth, USD.
items[].volumeUsdnumber | nullUSD the trader traded on this market.
items[].volumeSharesnumber | nullShares traded, summed across outcomes.
items[].costBasisUsdnumber | nullWhat the shares held now cost, USD.
items[].sharesHeldnumber | nullShares held now, summed across outcomes — outcomes has the position per outcome.
items[].buysnumber | nullNumber of buy fills.
items[].sellsnumber | nullNumber of sell fills.
items[].tradesnumber | nullNumber of fills, buys plus sells.
items[].pnlPerVolumenumber | nullRealized PnL divided by USD volume, as a fraction (0.0021 is 0.21%).
items[].profitPerTradeUsdnumber | nullRealized PnL divided by trades, USD.
items[].firstTradeTimestampnumber | nullUnix seconds.
items[].lastTradeTimestampnumber | nullUnix seconds.
items[].outcomesobject[]At most one entry per outcome, outcome 0 first (e.g. Yes then No). An outcome with no record is left out, so read label, not the position.
items[].outcomes[].outcomeIdstring | null
items[].outcomes[].labelstring | nulle.g. Yes.
items[].outcomes[].isWinningOutcomeboolean | nullWhether this outcome won, once the market has resolved. Null while it is open, and for a market that ended any other way.
items[].outcomes[].sharesHeldnumber | nullShares of this outcome held now.
items[].outcomes[].avgEntryPriceUsdnumber | nullAverage price paid per share of the shares held now, 0 to 1. Null when none are held.
items[].outcomes[].costBasisUsdnumber | null
items[].outcomes[].buysnumber | nullNumber of buy fills.
items[].outcomes[].sellsnumber | nullNumber of sell fills.
items[].outcomes[].buyVolumeUsdnumber | null
items[].outcomes[].sellVolumeUsdnumber | null
items[].outcomes[].realizedPnlUsdnumber | null
items[].outcomes[].currentPriceUsdnumber | nullThe outcome's current price, 0 to 1. Null once the market has resolved.
items[].outcomes[].currentPositionValueUsdnumber | null
items[].outcomes[].unrealizedPnlUsdnumber | null
items[].outcomes[].pnlStatusstring | nullThe trader's result on this outcome, e.g. WIN, NEUTRAL — WIN is possible on the losing outcome when it was sold at a profit. Open set: new values can appear.
items[].outcomes[].firstTradeTimestampnumber | nullUnix seconds. Null when the trader never traded this outcome.
items[].outcomes[].lastTradeTimestampnumber | nullUnix seconds. Null when the trader never traded this outcome.

Start building with DexData today

Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.

Get a free API key