Skip to main content
GET
cURL
Use this endpoint to browse markets without a search term. Each result includes the market identifier you need for its other API routes. If you know a word or phrase in the market’s title, use Search markets.

Parameters

Key response fields

Example

What it does not return

  • A market with no whale activity, or a market with an empty title. Both are omitted of the list.
  • More than 12 markets for one event. The market 0xinsider picked to represent the event is always one of them.
  • A page of more than 48 entries. That is the ceiling on limit.
  • A 400 for a cursor it cannot read. Explore drops an unreadable cursor and serves the first page instead, so follow next_cursor rather than assuming every request moved you forward.
  • A second provider. Every row is a Polymarket market, whatever platform says.

Caching

Save the response’s ETag and send it in If-None-Match on your next request. If the list has not changed, the server returns 304 Not Modified with no body. computed_at and fresh_for_seconds are omitted of the ETag, so a body recomputed with the same data keeps the same ETag.

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.

Query Parameters

category
string

Filter by market category (case-insensitive). A canonical bucket name (e.g. Basketball) matches every provider member that folds into it (NBA, WNBA, NCAAB); a raw provider value also resolves to its bucket. Facet values are returned as the canonical bucket.

status
enum<string>
default:all

Filter by market status. A market is closed once Polymarket has closed trading or it has resolved, and active otherwise; all returns both.

Available options:
active,
closed,
all
platform
enum<string>
default:polymarket

Filter by source platform. Explore is Polymarket-only; polymarket is the only supported value and the parameter is accepted for backward-compatibility but does not change the result set.

Available options:
polymarket
sort
enum<string>
default:trending

Sort order for the discovery feed. large_trades ranks by large-trade activity; whales is its deprecated spelling and selects the same order.

Available options:
trending,
hot,
expiring,
large_trades,
whales,
volume,
newest
cursor
string

Opaque pagination cursor from the previous response.

limit
integer
default:24

Page size. Out-of-range values are clamped to 1..48.

Required range: 1 <= x <= 48
q
string

Keyword search against market titles. At most 64 characters before whitespace trimming.

Maximum string length: 64

Response

Grouped market discovery results

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

Total matching visible entries after grouping. Present on the first page and omitted on cursor pages.

computed_at
string<date-time>

When this response body was computed. Present whenever the body came from, or was just written to, the 60s explore cache. Pair it with fresh_for_seconds to derive how much longer the body may be reused: fresh_for_seconds - age(computed_at). Excluded from the ETag validator, so a body recomputed with identical data keeps its validator.

fresh_for_seconds
integer

How long the body computed at computed_at is good for, in seconds. Deliberately not pre-subtracted: a cached body cannot carry a number that changes while it sits in the cache. Excluded from the ETag validator.