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

# Top 5 Levels

> Kalshi top 5 price levels

## Overview

Top 5 bid and ask price levels at every tick. Prices and sizes are stored as comma-separated strings, best level first. Available as both **CSV** (gzip-compressed) and **Parquet** (zstd-compressed).

## Columns

| <div style={{minWidth: '240px'}}>Column</div> | CSV type | Parquet type                 | Description                                   |
| --------------------------------------------- | -------- | ---------------------------- | --------------------------------------------- |
| `exchange`                                    | string   | string                       | Always `kalshi`                               |
| `ticker`                                      | string   | string                       | Market ticker                                 |
| `local_timestamp`                             | integer  | int64                        | Capture timestamp (nanoseconds since epoch)   |
| `exchange_timestamp`                          | string   | timestamp\_micros (nullable) | Exchange timestamp                            |
| `bid_prices`                                  | string   | string                       | Comma-separated bid prices (best first)       |
| `bid_sizes`                                   | string   | string                       | Comma-separated bid sizes at each price level |
| `ask_prices`                                  | string   | string                       | Comma-separated ask prices (best first)       |
| `ask_sizes`                                   | string   | string                       | Comma-separated ask sizes at each price level |

## Fetching Data

Use the `path` from the [list response](/datasets/kalshi/available-files#finding-exports-for-a-ticker). The download endpoint returns a **302 redirect** to a signed URL; follow it with `curl -L` or equivalent.

<CodeGroup>
  ```python Python theme={null}
  import requests

  def download_top_5(path, api_key):
      url = f"https://api.predictiondata.dev/v2/datasets{path}"
      headers = {"x-auth-token": api_key}

      response = requests.get(url, headers=headers, allow_redirects=True)
      response.raise_for_status()

      filename = path.split("/")[-1]
      with open(filename, "wb") as f:
          f.write(response.content)

      print(f"Downloaded to {filename}")

  if __name__ == "__main__":
      api_key = "YOUR_API_KEY"
      path = "/kalshi/KXSB-26-NE/top-5/2026-02-03.csv.gz"

      download_top_5(path, api_key)
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');
  const fs = require('fs');

  async function downloadTop5(path, apiKey) {
      const url = `https://api.predictiondata.dev/v2/datasets${path}`;

      const response = await axios.get(url, {
          headers: { 'x-auth-token': apiKey },
          responseType: 'arraybuffer'
      });

      const filename = path.split('/').pop();
      fs.writeFileSync(filename, response.data);
      console.log(`Downloaded to ${filename}`);
  }

  (async () => {
      const apiKey = "YOUR_API_KEY";
      const path = "/kalshi/KXSB-26-NE/top-5/2026-02-03.csv.gz";

      try {
          await downloadTop5(path, apiKey);
      } catch (error) {
          console.error("Error downloading data:", error.message);
      }
  })();
  ```

  ```bash cURL theme={null}
  curl -L -H "x-auth-token: YOUR_API_KEY" \
    "https://api.predictiondata.dev/v2/datasets/kalshi/KXSB-26-NE/top-5/2026-02-03.csv.gz" \
    --output top-5.csv.gz
  ```
</CodeGroup>

## Notes

* The orderbook is the **YES orderbook**. Bids are the raw YES bids from Kalshi. Asks are calculated by taking `1 - price` of the NO bids. If you need the raw, unconverted data, contact [calder@predictiondata.dev](mailto:calder@predictiondata.dev).
* Prices and quantities are rounded to 4 decimal places.
* `local_timestamp` is nanoseconds since Unix epoch (when our servers captured the message).
* `exchange_timestamp` is when the event occurred on Kalshi. In CSV it is an RFC 3339 string; in Parquet it is stored as `TimestampMicros`.
* Each export covers one UTC day (00:00:00 to 23:59:59).
