POLYANNA

POLYANNA

Search traders, compare leaderboard variants, and inspect profile analysis from public on-chain market activity.

Data sourced from on-chain activity

Explore

  • Leaderboards
  • Copyable Traders
  • Trader Profiles
  • Pricing

Learn

  • Docs
  • API Reference
  • FAQ

Legal

  • Privacy Policy
  • Terms of Service

Polyanna — Polymarket Intelligence

Getting Started

  • Overview
  • How Polyanna Works

Features

  • Leaderboards
  • Trader Profiles
  • Analysis Methodology
  • Trade Alerts

Metrics

  • PnL
  • Risk Metrics
  • Bot Detection

Reference

  • API Reference
  • Data Sources
  • Glossary

API Reference

Production API for developers building on Polyanna analytics.

Quickstart#

Most read endpoints are available without authentication, including leaderboard discovery, stats, trader search, and public trader profiles.

For authenticated reads such as trader analytics, auth-gated leaderboard variants, and authenticated full-profile reads, use either a Supabase bearer token or an API key from your account dashboard . External integrations should prefer the X-API-Key header.

Authenticated request
curl -H "X-API-Key: pa_live_your_key" \
  "https://polyanna.app/api/v1/trader/0x1234567890abcdef1234567890abcdef12345678/analytics"
Anonymous request
curl "https://polyanna.app/api/v1/stats"

Authentication#

Public reads are available without authentication on GET /leaderboard, GET /stats, GET /trader, and GET /trader/{address}. Some leaderboard variants are auth-gated and redact or block entries until the caller is authenticated. Protected routes such as GET /trader/{address}/analytics accept either Authorization: Bearer <token> or an API key passed via the X-API-Key header.

Create API keys from your account dashboard. Keys use the pa_live_ prefix and grant higher rate limits than anonymous access.

Rate Limiting#

All requests go through a sliding-window rate limiter.

Anonymous2 req/s per IP
Authenticated (bearer)2 req/s per user
API key10 req/s per key

Rate limit headers

X-RateLimit-LimitMaximum requests in current window
X-RateLimit-RemainingRequests left in current window
X-RateLimit-ResetSeconds until window resets
Retry-AfterWait time before retry (on 429)

Base URL#

https://polyanna.app/api

All endpoint paths below start with /v1.

Retries#

On 429, wait for the Retry-After value before retrying. Use exponential backoff for transient 5xx responses.

Endpoints#

List leaderboards#

GEThttps://polyanna.app/api/v1/leaderboard
Authenticated

Returns metadata for all available leaderboard variants. Some leaderboard tabs are auth-gated and return redacted entries until the caller is authenticated. Use the id field to fetch a specific leaderboard via GET /leaderboard/{leaderboard_id}.

Parameters

No parameters.

Response

200Successful Response
401Authentication required, or provided credentials are invalid
422Validation Error
429Rate limit exceeded
503Service unavailable

Response body

itemsLeaderboardIndex[]

Array of objects

Get leaderboard by ID#

GEThttps://polyanna.app/api/v1/leaderboard/{leaderboard_id}
Authenticated

Returns a single leaderboard by its ID (e.g. volume-7d, roi-all). Auth-gated leaderboard tabs require authentication before their entries can be fetched. The ID format is {tab}-{period}. Call GET /leaderboard to discover available IDs.

Parameters

leaderboard_idstringrequiredpath
limitintegerquery

Max entries to return. Values above the default require Pro.

Response

200Successful Response
401Authentication required, or provided credentials are invalid
404Leaderboard not found
422Validation Error
429Rate limit exceeded
503Service unavailable

Response body

entriesLeaderboardEntry[]
generatedAtstring
idstring
periodTimePeriod
tabLeaderboardTab

Get platform stats#

GEThttps://polyanna.app/api/v1/stats
Authenticated

Returns high-level platform-wide trader and market stats.

Parameters

No parameters.

Response

200Successful Response
401Authentication required, or provided credentials are invalid
422Validation Error
429Rate limit exceeded
503Service unavailable

Response body

avgMarketsPerTradernumber | nulloptionalnullable
avgWinRatenumber | nulloptionalnullable
botVolumeSharenumber | nulloptionalnullable
dataCutoffstring | nulloptionalnullable
dataPeriodstring
dataQualityDataQualityStatus | nulloptionalnullable
estimatedBotsstring
loserCountinteger | nulloptionalnullable
marketsTrackedstring
medianPnlnumber | nulloptionalnullable
monthlyEventsMonthlyEventCount[]optional
monthlyFillsMonthlyFillCount[]optional
ordersFilledstring
topTraderPnlnumber | nulloptionalnullable
totalFeesPaidnumber | nulloptionalnullable
totalMoneyLostnumber | nulloptionalnullable
totalMoneyWonnumber | nulloptionalnullable
totalTradersstring
totalVolumenumber | nulloptionalnullable
winnerCountinteger | nulloptionalnullable
worstTraderPnlnumber | nulloptionalnullable

List traders#

GEThttps://polyanna.app/api/v1/trader
Authenticated

Returns all traders that appear on any leaderboard.

Parameters

No parameters.

Response

200Successful Response
401Authentication required, or provided credentials are invalid
422Validation Error
429Rate limit exceeded
503Service unavailable

Response body

itemsSearchableTrader[]

Array of objects

Get trader profile#

GEThttps://polyanna.app/api/v1/trader/{address}
Authenticated

Returns a trader's public profile including PnL, win rate, volume, trade count, market count, bot probability score, percentile ranks, and PnL series. When authenticated (Tier 2+), the response also includes analytics. The address is case-insensitive (lowercased automatically).

Parameters

addressstringrequiredpath

Pattern: ^0x[0-9a-fA-F]{40}$

Response

200Successful Response
401Authentication required, or provided credentials are invalid
404Trader not found
422Validation Error
429Rate limit exceeded
503Service unavailable

Response body

addressstring
analyticsTraderAnalytics | nullnullable
biostring | nulloptionalnullable
botComponentsBotScoreComponents | nulloptionalnullable
botProbabilitynumber
marketCountinteger
maxDrawdownnumber | nulloptionalnullable
memberSincestring
percentilesPercentileRanks | nulloptionalnullable
pnlnumber
pnlSeriesPnlDataPoint[]
profileImagestring | nulloptionalnullable
roinumber | nulloptionalnullable
shareVolumenumber
sharpeRationumber | nulloptionalnullable
totalBoughtnumber | nulloptionalnullable
tradeCountinteger
usdVolumenumber
usernamestring
verifiedBadgebooleanoptional
winRatenumber
xUsernamestring | nulloptionalnullable

Get trader analytics#

GEThttps://polyanna.app/api/v1/trader/{address}/analytics
Authenticated

Returns deeper trader analytics including profile summary, risk metrics, and behavior breakdowns. The address is case-insensitive (lowercased automatically).

Parameters

addressstringrequiredpath

Pattern: ^0x[0-9a-fA-F]{40}$

Response

200Successful Response
401Authentication required, or provided credentials are invalid
403Authenticated caller does not have access to this route
404Trader not found
422Validation Error
429Rate limit exceeded
503Service unavailable

Response body

avgPositionSizenumber
avgTradesPerMarketnumber
biggestLossTradeRecord | nulloptionalnullable
biggestWinTradeRecord | nulloptionalnullable
categoryBreakdownCategoryCount[]
dominantMarketstring | nulloptionalnullable
hourlyActivityHourlyActivity[]optional
lossStreakinteger
marketSignalsMarketSignalsSummary | nulloptionalnullable
pnlConcentrationTop3Sharenumberoptional
topicEdgeTopicEdgeSummary | nulloptionalnullable
winStreakinteger

Errors#

All errors return a JSON body with a detail field.

401Authentication required or credentials invalid
404Resource not found
422Validation error (bad path/query parameters)
429Rate limit exceeded
503Service temporarily unavailable
Example error
{
  "detail": "Missing API key"
}
Previous
Bot Detection
Next
Data Sources