Skip to main content
GET
/
v1
/
markets
/
search
Search Markets
curl --request GET \
  --url https://api.rivermarkets.com/v1/markets/search \
  --header 'X-River-Key-Id: <api-key>' \
  --header 'X-River-Signature: <api-key>' \
  --header 'X-River-Timestamp: <api-key>'
{
  "query": "<string>",
  "results": [
    {
      "river_id": 123,
      "exchange_value": 123,
      "exchange_name": "<string>",
      "tick_size_price": 123,
      "tick_size_qty": 123,
      "minimum_order_size": 123,
      "neg_risk": true,
      "name": "<string>",
      "ticker": "<string>",
      "token_id_yes": "<string>",
      "token_id_no": "<string>",
      "slug": "<string>",
      "tick_structure": "uniform",
      "expiration_datetime": "<string>",
      "start_datetime": "<string>",
      "neg_risk_id": "<string>",
      "condition_id": "<string>",
      "subtitle": "<string>",
      "description": "<string>",
      "category": "Other",
      "subcategory": "<string>",
      "rank": 123,
      "event_ticker": "<string>",
      "event_title": "<string>",
      "volume": 123,
      "volume_24h": 123,
      "series_ticker": "<string>",
      "image": "<string>",
      "primary_entity_name": "<string>"
    }
  ],
  "total": 123,
  "total_events": 123
}

Documentation Index

Fetch the complete documentation index at: https://docs.rivermarkets.com/llms.txt

Use this file to discover all available pages before exploring further.

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)

sort_by
string | null

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

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