Skip to main content
GET
The graded holder roster of any Polymarket market, the same list a Pick of the Day shows for its market: every S/A/B wallet with open shares on either outcome, from a complete provider holder scan, each with its shares, Polymarket’s own current value for the leg, its grade, its win record in the market’s category, and its badges. Use it to see who is positioned on a market before you read the trade feed.

Fields on the roster

  • Both outcomes are listed; a wallet holding both is listed once on its net side.
  • Rows are ordered by current_value_usd descending, then shares descending, then address.
  • scan.wallet_count reports every wallet the provider walk saw, graded or not. The route never widens past the graded cohort to fill a page.
  • scan.complete and scan.fetched_at describe the underlying provider walk. The roster is computed at most once a minute per market and shared by every caller, so paging is cheap and total is exact.
  • totals breaks the roster down by outcome and grade: yes_count, no_count, yes_usd, no_usd, yes_grades, and no_grades.

Filters

  • outcome keeps holders netting one side: yes, no, or all (default, both).
  • min_grade narrows within the graded cohort: S keeps S, A keeps S and A, B (default) keeps S, A, and B. C, D, and F are rejected with 400; the route never lists below B.
  • limit accepts 1 to 100 and defaults to 20. cursor pages through the shared roster and stays valid across its minute-by-minute refresh.
This route does not return ungraded wallets, even at a lower min_grade; scan.wallet_count is the only count that includes them.

The 503

An incomplete, unstable, or failed provider scan returns 503 with Retry-After and error.reason: "read_model_warming", never a shorter list served in its place. Get Market Snapshot returns the market card this roster belongs to.

Authorizations

Authorization
string
header
required

API key or OAuth 2.1 access token in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Data calls require an active Pro subscription and return live data. A 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.0xinsider.com/.well-known/oauth-protected-resource" (RFC 6750 section 3, RFC 9728).

Headers

If-None-Match
string

Conditional GET validator from a previous ETag. Matching values return 304 Not Modified with an empty body.

Path Parameters

condition_id
string
required

Market condition ID. Accepts the raw provider-backed condition_id returned by /api/v1/markets/search or the mkt_-prefixed market.id emitted by V1 responses.

Query Parameters

outcome
enum<string>
default:all

Keep holders netting one side. all (default) lists both.

Available options:
yes,
no,
all
min_grade
enum<string>
default:B

Narrow within the graded cohort: S keeps S, A keeps S and A, B (default) keeps S, A and B. C, D and F are rejected with 400: the route lists the S/A/B cohort only.

Available options:
S,
A,
B
limit
integer
default:20

Maximum holders per page.

Required range: 1 <= x <= 100
cursor
string

Pagination cursor from the previous response's next_cursor (prefix mh_). Pages are cut from one shared roster, so a cursor stays valid across the roster's refresh.

Response

One page of the market's graded holder roster.

object
string
required
Allowed value: "list"
data
object[]
required
has_more
boolean
required
total
integer
required

Holders matching the request's outcome and min_grade filters across every page.

market
object
required
scan
object
required
totals
object
required

Roster totals BEFORE any outcome or min_grade filter, so a page always knows the whole market it was cut from.

meta
object
required
next_cursor
string

Absent on the last page.