> ## Documentation Index
> Fetch the complete documentation index at: https://docs.probsights.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Search markets

> Find markets by text query or series.

Find markets by text query, by `series_id`, or both. Use `series_id` from
[Search series](/api-reference/search-series) to scope results to one product line.

## Request

```
https://api.probsights.com/search/markets
```

### Query parameters

<ParamField query="q" type="string">
  Substring on question, title, subtitle, description, market id, slug, or exact
  `interval_code`. **Required unless `series_id` is set.**
</ParamField>

<ParamField query="series_id" type="string">
  Filter to one series. **Required unless `q` is set.**
</ParamField>

<ParamField query="exchange" type="string">
  `kalshi` or `polymarket`.
</ParamField>

<ParamField query="category" type="string">
  Exact category match.
</ParamField>

<ParamField query="status" type="string" default="active">
  `active` or `closed`.
</ParamField>

<ParamField query="min_volume" type="number">
  Minimum market volume.
</ParamField>

<ParamField query="min_liquidity" type="number">
  Minimum market liquidity.
</ParamField>

<ParamField query="discovered_after" type="string">
  ISO 8601 lower bound on `discovered_at`.
</ParamField>

<ParamField query="settled_after" type="string">
  ISO 8601; pair with `status=closed` for backtests.
</ParamField>

<ParamField query="settled_before" type="string">
  ISO 8601 upper bound on `settled_at`.
</ParamField>

<ParamField query="sort_by" type="string">
  `relevance`, `newest`, `volume`, or `liquidity`.
  Defaults to `relevance` when `q` is set, otherwise `newest`.
</ParamField>

<ParamField query="limit" type="integer" default="20">
  Number of results (1–100).
</ParamField>

<ParamField query="offset" type="integer" default="0">
  Pagination offset.
</ParamField>

## Response

Returns a JSON **array** of market objects.

<ResponseField name="market_id" type="string">
  Source market ticker / ID — use with historical endpoints.
</ResponseField>

<ResponseField name="exchange" type="string">
  `kalshi` or `polymarket`.
</ResponseField>

<ResponseField name="series_id" type="string">
  Parent series source ID.
</ResponseField>

<ResponseField name="title" type="string">
  Formatted market headline (Kalshi); may be null for Polymarket.
</ResponseField>

<ResponseField name="subtitle" type="string">
  Compact disambiguator (strike or close time).
</ResponseField>

<ResponseField name="question" type="string">
  Market question text.
</ResponseField>

<ResponseField name="status" type="string">
  `active` or `closed`.
</ResponseField>

<ResponseField name="volume" type="number">
  Traded volume.
</ResponseField>

<ResponseField name="liquidity" type="number">
  Liquidity.
</ResponseField>

<ResponseField name="last_yes_price" type="string">
  Last YES price as a four-decimal string (e.g. `"0.9990"`).
</ResponseField>

<ResponseField name="last_no_price" type="string">
  Last NO price as a four-decimal string.
</ResponseField>

<ResponseField name="event_id" type="string">
  Parent event source ID.
</ResponseField>

<ResponseField name="settled_at" type="string">
  Settlement time when closed, else null.
</ResponseField>

## Examples

### Active markets in a series

<CodeGroup>
  ```bash cURL theme={null}
  curl -H "X-API-Key: YOUR_API_KEY" \
    "https://api.probsights.com/search/markets?series_id=KXBTC15M&status=active&limit=10"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.probsights.com/search/markets",
      headers={"X-API-Key": "YOUR_API_KEY"},
      params={"series_id": "KXBTC15M", "status": "active", "limit": 10},
  )
  markets = response.json()
  ```
</CodeGroup>

### Settled window for backtests

<CodeGroup>
  ```bash cURL theme={null}
  curl -H "X-API-Key: YOUR_API_KEY" \
    "https://api.probsights.com/search/markets?series_id=KXBTC15M&status=closed&settled_after=2026-04-25T00:00:00Z&limit=100"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.probsights.com/search/markets",
      headers={"X-API-Key": "YOUR_API_KEY"},
      params={
          "series_id": "KXBTC15M",
          "status": "closed",
          "settled_after": "2026-04-25T00:00:00Z",
          "limit": 100,
      },
  )
  markets = response.json()
  ```
</CodeGroup>
