Skip to main content
GET
cURL
Use this endpoint to see the biggest positions in a market, whatever the wallet’s grade. It lists up to 100 wallets per side, largest shares first, the same table the market’s event page shows under Top holders. For every S, A, and B wallet holding the market, from a complete Polymarket scan with exact counts, use Market holders.

Parameters

Key response fields

Freshness

The sample is shared with the event page and every caller. On an open market it is rebuilt at most every 30 seconds from Polymarket’s holder board, which 0xinsider re-reads at most every 120 seconds, so a position can be up to about 150 seconds old. positions_as_of says when the board was fetched, computed_at when the sample was built, and meta.cache_age_s how old the response is. On a resolved market the sample is at most 300 seconds old and carries no positions_as_of.

Example

What it does not return

  • Every holder. Each side stops at 100 wallets, so a market with more holders shows its largest 100.
  • Exact grade counts or USD by grade. Market holders has them for S, A, and B.
  • An empty list in place of an error. When the holder data is busy or Polymarket’s holder read fails, the route returns 503 with error.reason read_model_warming and a Retry-After.
  • A market 0xinsider has no record of. That id returns 404, and a market outside sports and esports is refused.
  • Paging. There is no cursor: raise limit to 100 for the whole sample.

Caching

Save the response’s ETag and send it in If-None-Match on your next request. If the sample has not changed, the server returns 304 Not Modified with no body.

Authorizations

Authorization
string
header
required

Legacy default or named integration API key, or OAuth 2.1 access token, in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Default keys retain full access; integration keys are limited to their approved read, webhooks, export and usage scopes and expire within 90 days. All credentials share the owner's account limits. 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

X-Query-Validation
enum<string>

Opt into strict query-name validation. The default is compatible: unknown names are ignored and reported in X-Query-Ignored. With strict, an unknown name returns 400 bad_request with error.reason unknown_query_parameter before the handler runs, including when its percent escape is incomplete.

Available options:
strict
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

limit
integer
default:20

Maximum holders per outcome. Out-of-range values are clamped to 1..100. totals covers the whole sample whatever the limit.

Required range: 1 <= x <= 100

Response

The market's largest holders on each outcome.

object
string
required
Allowed value: "market_top_holders"
data
object
required
meta
object
required