> ## 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 series

> List Kalshi and Polymarket series by text query.

Returns series sorted by the selected `sort_by` mode. Use this endpoint to find a
`series_id`, then pass it to [Search markets](/api-reference/search-markets) or
[Search events](/api-reference/search-events).

## Request

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

### Query parameters

<ParamField query="q" type="string">
  Case-insensitive substring match on `series_id` and `title`. Example: `q=15m` or `q=KXBTC`.
</ParamField>

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

<ParamField query="category" type="string">
  Exact category match (e.g. `Crypto`, `Sports`).
</ParamField>

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

<ParamField query="sort_by" type="string" default="title">
  `title` or `newest` (by `discovered_at`).
</ParamField>

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

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

## Response

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

<ResponseField name="series_id" type="string">
  Pass this to `?series_id=` on Search markets and Search events.
</ResponseField>

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

<ResponseField name="title" type="string">
  Human-readable series title.
</ResponseField>

<ResponseField name="slug" type="string">
  Kalshi web URL slug (null for Polymarket).
</ResponseField>

<ResponseField name="url" type="string">
  Exchange web page URL when available.
</ResponseField>

<ResponseField name="category" type="string">
  Category label, may be null.
</ResponseField>

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

<ResponseField name="n_events_total" type="integer">
  Total events in this series.
</ResponseField>

<ResponseField name="n_events_active" type="integer">
  Events currently open for trading.
</ResponseField>

<ResponseField name="earliest_event_at" type="string">
  Earliest event window start (ISO 8601), may be null.
</ResponseField>

<ResponseField name="latest_event_at" type="string">
  Latest event window end (ISO 8601), may be null.
</ResponseField>

## Examples

### Find all 15-minute crypto series

<CodeGroup>
  ```bash cURL theme={null}
  curl -H "X-API-Key: YOUR_API_KEY" \
    "https://api.probsights.com/search/series?q=15m"
  ```

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

  response = requests.get(
      "https://api.probsights.com/search/series",
      headers={"X-API-Key": "YOUR_API_KEY"},
      params={"q": "15m"},
  )
  series = response.json()
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch(
    "https://api.probsights.com/search/series?q=15m",
    { headers: { "X-API-Key": "YOUR_API_KEY" } }
  );
  const series = await res.json();
  ```
</CodeGroup>

### Response

```json theme={null}
[
  {
    "series_id": "KXBTC15M",
    "exchange": "kalshi",
    "title": "Bitcoin price up down",
    "slug": "bitcoin-price-up-down",
    "url": "https://kalshi.com/markets/kxbtc15m/bitcoin-price-up-down",
    "category": "Crypto",
    "status": "active",
    "n_events_total": 42,
    "n_events_active": 3,
    "earliest_event_at": "2026-07-01T12:00:00Z",
    "latest_event_at": "2026-07-11T18:00:00Z"
  }
]
```
