Skip to main content
GET
/
polymarket
/
trader
/
pnl
/
{address}
/
categories
Get trader category PnL
curl --request GET \
  --url https://api.struct.to/v1/polymarket/trader/pnl/{address}/categories
[
  {
    "realized_pnl_usd": 123,
    "markets_traded": 1,
    "markets_resolved": 1,
    "markets_won": 1,
    "markets_lost": 1,
    "market_win_rate_pct": 123,
    "avg_win_usd": 123,
    "avg_loss_usd": 123,
    "profit_factor": 123,
    "total_buys": 1,
    "total_sells": 1,
    "total_redemptions": 1,
    "total_merges": 1,
    "total_volume_usd": 123,
    "buy_volume_usd": 123,
    "sell_volume_usd": 123,
    "redemption_volume_usd": 123,
    "merge_volume_usd": 123,
    "total_fees": 123,
    "total_wins_usd": 123,
    "total_losses_usd": 123,
    "avg_hold_time_seconds": 123,
    "total_shares_bought": 123,
    "buy_count": 1,
    "sell_count": 1,
    "redeem_count": 1,
    "merge_count": 1,
    "split_count": 1,
    "converted_count": 1,
    "converted_shares_gained": 123,
    "converted_shares_lost": 123,
    "outcomes_traded": 1,
    "last_block": 1,
    "category": "<string>",
    "trader": {
      "address": "<string>",
      "verified_badge": true,
      "name": "<string>",
      "pseudonym": "<string>",
      "profile_image": "<string>",
      "x_username": "<string>"
    },
    "total_pnl_usd": 123,
    "unrealized_pnl_usd": 123,
    "realized_pnl_pct": 123,
    "total_pnl_pct": 123,
    "total_splits": 1,
    "convert_collateral_usd": 123,
    "split_volume_usd": 123,
    "best_trade_pnl_usd": 123,
    "best_trade_condition_id": "<string>",
    "worst_trade_pnl_usd": 123,
    "worst_trade_condition_id": "<string>",
    "best_trade_metadata": {
      "condition_id": "<string>",
      "market_slug": "<string>",
      "title": "<string>",
      "question": "<string>",
      "image_url": "<string>",
      "event_slug": "<string>"
    },
    "worst_trade_metadata": {
      "condition_id": "<string>",
      "market_slug": "<string>",
      "title": "<string>",
      "question": "<string>",
      "image_url": "<string>",
      "event_slug": "<string>"
    },
    "first_trade_at": 123,
    "last_trade_at": 123
  }
]

Path Parameters

address
string
required

Trader wallet address

Query Parameters

timeframe
enum<string>

Default: lifetime

Available options:
1d,
7d,
30d,
lifetime
sort_by
enum<string>

Default: realized_pnl_usd Sort field for category PnL results. Supported values cover realized PnL, volume, trade counts, fees, rewards, positions, and trade timing.

Available options:
realized_pnl_usd,
total_pnl_usd,
unrealized_pnl_usd,
total_volume_usd,
buy_volume_usd,
sell_volume_usd,
redemption_volume_usd,
merge_volume_usd,
split_volume_usd,
total_converts,
total_fees,
total_buys,
total_sells,
total_splits,
total_shares_bought,
markets_traded,
markets_resolved,
markets_won,
markets_lost,
market_win_rate_pct,
avg_win_usd,
avg_loss_usd,
profit_factor,
total_wins_usd,
total_losses_usd,
best_trade_pnl_usd,
worst_trade_pnl_usd,
avg_hold_time_seconds,
buy_count,
sell_count,
redeem_count,
merge_count,
split_count,
outcomes_traded,
first_trade_at,
last_trade_at
sort_direction
enum<string>

Default: desc

Available options:
asc,
desc
limit
integer<int32>

Default 50, max 500

offset
integer<int32>

Max 2500. Takes precedence over pagination_key.

pagination_key
string

Cursor from a previous response

category
enum<string>

Filter to a single category Polymarket UI category.

Available options:
Politics,
Sports,
Crypto,
Finance,
Culture,
Mentions,
Weather,
Economics,
Tech

Response

Per-category PnL rows

realized_pnl_usd
number<double>
required
markets_traded
integer<int64>
required
Required range: x >= 0
markets_resolved
integer<int64>
required
Required range: x >= 0
markets_won
integer<int64>
required
Required range: x >= 0
markets_lost
integer<int64>
required
Required range: x >= 0
market_win_rate_pct
number<double>
required
avg_win_usd
number<double>
required
avg_loss_usd
number<double>
required
profit_factor
number<double>
required
total_buys
integer<int64>
required
Required range: x >= 0
total_sells
integer<int64>
required
Required range: x >= 0
total_redemptions
integer<int64>
required
Required range: x >= 0
total_merges
integer<int64>
required
Required range: x >= 0
total_volume_usd
number<double>
required
buy_volume_usd
number<double>
required
sell_volume_usd
number<double>
required
redemption_volume_usd
number<double>
required
merge_volume_usd
number<double>
required
total_fees
number<double>
required
total_wins_usd
number<double>
required
total_losses_usd
number<double>
required
avg_hold_time_seconds
number<double>
required
total_shares_bought
number<double>
required
buy_count
integer<int64>
required
Required range: x >= 0
sell_count
integer<int64>
required
Required range: x >= 0
redeem_count
integer<int64>
required
Required range: x >= 0
merge_count
integer<int64>
required
Required range: x >= 0
split_count
integer<int64>
required
Required range: x >= 0
converted_count
integer<int64>
required
Required range: x >= 0
converted_shares_gained
number<double>
required
converted_shares_lost
number<double>
required
outcomes_traded
integer<int64>
required
Required range: x >= 0
last_block
integer<int64>
required
Required range: x >= 0
category
string | null
trader
object
total_pnl_usd
number<double>
unrealized_pnl_usd
number<double>
realized_pnl_pct
number<double> | null
total_pnl_pct
number<double> | null
total_splits
integer<int64>

Number of split transactions in the selected timeframe.

Required range: x >= 0
convert_collateral_usd
number<double>
split_volume_usd
number<double>

USD collateral split into outcome tokens in the selected timeframe.

best_trade_pnl_usd
number<double> | null
best_trade_condition_id
string | null
worst_trade_pnl_usd
number<double> | null
worst_trade_condition_id
string | null
best_trade_metadata
object

Market metadata (condition_id, slug, title, question, image_url, event_slug) for the market behind the best PnL trade in this summary at this timeframe. null when no trade qualifies.

worst_trade_metadata
object

Market metadata for the market behind the worst PnL trade.

first_trade_at
integer<int64> | null
last_trade_at
integer<int64> | null
Last modified on June 13, 2026