Skip to main content
GET
Search Markets

Authorizations

X-River-Key-Id
string
header
required

UUID of your API key (from Settings → API Keys).

X-River-Timestamp
string
header
required

Current unix seconds. Must be within 30s of server time.

X-River-Signature
string
header
required

Base64 Ed25519 signature over the canonical request: METHOD\nPATH\nSORTED_QUERY\nTIMESTAMP\nSHA256(body) hex. See /api-reference/authentication for the full recipe.

Query Parameters

q
string | null

Search query

Minimum string length: 1
exchange_name
string | null

Filter by exchange name (KALSHI, POLYMARKET)

category
string[] | null

Filter by canonical category. Repeat the param to filter to multiple categories (Sports, Crypto, Politics, Finance, Entertainment, Science & Tech, Weather, World Affairs, Health, Social, Other).

subcategory
string | null

Filter by subcategory (e.g. Basketball, Football)

status
enum<string> | null

Filter by instrument status Instrument status derived in instruments table from exchange-specific fields.

Kalshi: maps from kalshi_markets.status - 'active' -> ACTIVE - everything else (closed, determined, finalized, settled, amended, inactive, initialized) -> CLOSED

Polymarket: maps from polymarket_markets.closed and polymarket_markets.active booleans - closed=true -> CLOSED - active=true (and not closed) -> ACTIVE - else (active=false, closed=false) -> INACTIVE

Available options:
active,
closed,
inactive
expiration_date_start
string<date-time> | null

Start of expiration date range (inclusive, ISO 8601)

expiration_date_end
string<date-time> | null

End of expiration date range (exclusive, ISO 8601)

start_datetime_after
string<date-time> | null

Filter to markets with start_datetime >= this (ISO 8601)

start_datetime_before
string<date-time> | null

Filter to markets with start_datetime < this (ISO 8601)

event_ticker
string | null

Filter by event_ticker (exact match)

last_price_min
number | null

Filter to markets with last_price >= this value (0.0–1.0 YES probability).

Required range: 0 <= x <= 1
last_price_max
number | null

Filter to markets with last_price <= this value (0.0–1.0 YES probability).

Required range: 0 <= x <= 1
volume_min
integer | null

Filter to events whose total summed volume >= this value.

Required range: x >= 0
sort_by
string | null

Sort mode for event-based pagination: trending, volume, newest, ending-soon, start-time, price

limit
integer
default:20

Maximum number of results

Required range: 1 <= x <= 1000
offset
integer
default:0

Offset for pagination

Required range: x >= 0
event_limit
integer | null

Paginate by events instead of markets. Up to 200 by default; values above that require start_datetime_after or start_datetime_before.

Required range: 1 <= x <= 2000
event_offset
integer | null

Event offset for event-based pagination

Required range: x >= 0

Response

Successful Response

Schema for market search response.

query
string
required
results
MarketSearchResult · object[]
required
total
integer
required
total_events
integer | null