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

# Tick Data

> Download raw, tick-level Kalshi orderbook deltas as bulk columnar Parquet

Download the **raw orderbook-delta firehose** behind Kalshi — every price-level change at full resolution, as sorted, `zstd`-compressed Parquet. Call with `venue=kalshi`; feed the signed URLs into your own DuckDB, Polars, or Spark. Replay the deltas to reconstruct the book at any instant.

<Warning>
  **Releasing soon — not publicly reachable yet.** Kalshi Ticks is in a gated private preview. The endpoint is live but **access is restricted**: a standard API key is rejected until the dataset is enabled on your account. This page documents the contract so you can build ahead of launch. **[Request early access →](mailto:team@predexon.com)**
</Warning>

<Note>**Finalized data only (T-1).** Ticks are compacted daily at **06:00 UTC**; today/future days return `404 not_final`. For ready-made snapshots use [Kalshi Orderbook History](/api-reference/kalshi/orderbooks).</Note>

| Constraint     | Value                                                                      |
| -------------- | -------------------------------------------------------------------------- |
| Date range     | Up to **31 days** per request                                              |
| Signed URL TTL | \~**1 hour** (`expires_at`)                                                |
| Day selection  | exactly one of `date`, `start_date`+`end_date`, or `start_time`+`end_time` |

<Warning>Timestamps are epoch **milliseconds, UTC**; prices are in **cents** (1–99). Pass the **Kalshi ticker** as `market_id` to prune a day down to 1–2 files (Parquet is sorted by `ticker`).</Warning>

## Schema

Orderbook deltas (signed change in resting size at a price level), sorted by `(ticker, timestamp, sequence)`.

| Column      | Type   | Notes                                 |
| ----------- | ------ | ------------------------------------- |
| `ticker`    | string | Kalshi market ticker                  |
| `timestamp` | int64  | Event time (epoch ms)                 |
| `price`     | int32  | Price level, integer **cents** (1–99) |
| `delta`     | int32  | Signed change in resting quantity     |
| `side`      | string | `yes` / `no`                          |
| `sequence`  | int64  | Monotonic per-ticker sequence         |

<Tip>Want JSON rows instead of files? `GET /v2/data/ticks/query?venue=kalshi&market_id=TICKER&start_time=…&end_time=…` runs a server-side DuckDB query (no storage URL exposed). Other venues: [Polymarket Ticks](/data-signals/ticks/polymarket), [Opinion Ticks](/data-signals/ticks/opinion).</Tip>


## OpenAPI

````yaml GET /v2/data/ticks
openapi: 3.1.0
info:
  title: Predexon API
  description: Prediction market data aggregation and matching API
  version: 2.0.0
servers:
  - url: https://api.predexon.com
security:
  - apiKey: []
paths:
  /v2/data/ticks:
    get:
      tags:
        - data
      summary: Download Tick Data
      description: >-
        Download raw, tick-level history as signed Apache Parquet URLs. Returns
        a list of Parquet **parts** (each with its row/byte counts and ID/time
        coverage range) plus the dataset schema. Feed the signed URLs into your
        own DuckDB, Polars, pandas, or Spark.


        **Releasing soon** — this dataset is in a gated private preview and is
        not yet reachable with a standard API key.


        Finalized data only: raw ticks are compacted daily at 06:00 UTC, so
        requests for today/future (or any day without a manifest) return `404
        not_final`. Pick the day(s) with exactly one of `date`,
        `start_date`+`end_date`, or `start_time`+`end_time` (epoch ms). Signed
        URLs expire after ~1 hour.
      operationId: get_ticks_v2_data_ticks_get
      parameters:
        - name: venue
          in: query
          required: true
          schema:
            type: string
            enum:
              - polymarket
              - kalshi
              - opinion
            description: Dataset key.
            title: Venue
          description: >-
            Dataset key: `polymarket` (CLOB price changes), `kalshi`, or
            `opinion` (orderbook deltas).
        - name: date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Single UTC day, YYYY-MM-DD.
            title: Date
          description: Single UTC day, YYYY-MM-DD.
        - name: start_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Range start, YYYY-MM-DD (pair with end_date).
            title: Start Date
          description: Range start, YYYY-MM-DD (pair with end_date).
        - name: end_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Range end, YYYY-MM-DD (inclusive).
            title: End Date
          description: Range end, YYYY-MM-DD (inclusive).
        - name: start_time
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: >-
              Window start, epoch ms UTC. Selects/derives days and prunes parts
              by ts range.
            title: Start Time
          description: >-
            Window start, epoch ms UTC. Selects/derives days and prunes parts by
            ts range.
        - name: end_time
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Window end, epoch ms UTC (inclusive).
            title: End Time
          description: Window end, epoch ms UTC (inclusive).
        - name: market_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Prune to the part(s) covering this market/ticker.
            title: Market Id
          description: Prune to the part(s) covering this market/ticker.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicksResponse'
        '400':
          description: Bad or missing parameters (invalid venue, range, or params).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            `not_final` (day not compacted yet) or `not_found` (no data for
            venue/date/market).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    TicksResponse:
      type: object
      title: TicksResponse
      description: Signed-URL download response for a venue/date (or date range).
      properties:
        venue:
          type: string
          title: Venue
        date:
          anyOf:
            - type: string
            - type: 'null'
          title: Date
        start_date:
          anyOf:
            - type: string
            - type: 'null'
          title: Start Date
        end_date:
          anyOf:
            - type: string
            - type: 'null'
          title: End Date
        start_time:
          anyOf:
            - type: integer
            - type: 'null'
          title: Start Time
        end_time:
          anyOf:
            - type: integer
            - type: 'null'
          title: End Time
        market_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Market Id
        status:
          type: string
          title: Status
          default: final
        format:
          type: string
          title: Format
          default: parquet
        compression:
          type: string
          title: Compression
          default: zstd
        schema:
          type: array
          items:
            $ref: '#/components/schemas/TickSchemaField'
          title: Schema
          description: Column names and types in the Parquet files.
        sort_order:
          type: array
          items:
            type: string
          title: Sort Order
          description: Columns the files are globally sorted by.
        parts:
          type: array
          items:
            $ref: '#/components/schemas/TickPart'
          title: Parts
        total_rows:
          type: integer
          title: Total Rows
        total_bytes:
          type: integer
          title: Total Bytes
      required:
        - venue
        - status
        - format
        - compression
        - schema
        - sort_order
        - parts
        - total_rows
        - total_bytes
    ErrorResponse:
      properties:
        error:
          type: string
          title: Error
        message:
          type: string
          title: Message
      type: object
      required:
        - error
        - message
      title: ErrorResponse
      description: Standard error response.
    TickSchemaField:
      type: object
      title: TickSchemaField
      description: One column in a tick dataset's Parquet schema.
      properties:
        name:
          type: string
          title: Name
        type:
          type: string
          title: Type
      required:
        - name
        - type
    TickPart:
      type: object
      title: TickPart
      description: A single Parquet part with a signed download URL and its coverage range.
      properties:
        url:
          type: string
          title: Url
          description: Short-lived signed GET URL for one Parquet file.
        rows:
          type: integer
          title: Rows
        bytes:
          type: integer
          title: Bytes
        id_min:
          anyOf:
            - type: string
            - type: 'null'
          title: Id Min
          description: Lowest ID-column value in the part.
        id_max:
          anyOf:
            - type: string
            - type: 'null'
          title: Id Max
        ts_min:
          anyOf:
            - type: integer
            - type: 'null'
          title: Ts Min
          description: Earliest timestamp (epoch ms) in the part.
        ts_max:
          anyOf:
            - type: integer
            - type: 'null'
          title: Ts Max
        expires_at:
          type: string
          title: Expires At
          description: When the signed URL stops working (~1 hour out).
      required:
        - url
        - rows
        - bytes
        - expires_at
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````