---
title: "Get market price history"
method: GET
path: "/v4/data/prediction/markets/{id}/history"
tags: ["Prediction API"]
---

# Get market price history

`GET /v4/data/prediction/markets/{id}/history`

/v4/data/prediction/markets/{id}/history

**200 credits per API call**

Historical OHLC price candles for a market over a time window. Used to power chart views — every candle includes open / high / low / close prices plus the in-bucket trade volume.

**Filtering**

*   `interval` is required. Accepted values: `1m`, `5m`, `15m`, `1h`, `4h`, `1d`, `1w`. Each interval has a maximum allowed range (e.g. `1m` can be queried for ~1 day at a time, `1d` for ~1 year). Requests exceeding the range cap return `400`.
*   `start` and `end` are required ISO-8601 timestamps. `end` must be after `start`.
*   `source` selects the underlying data feed. Defaults to `candlesticks` (trade-based OHLC with real volume). Pass `midpoint` to switch to a midpoint-quote feed with broader range coverage at the cost of `volume = 0` on every candle. `source=midpoint` is supported on Polymarket only — passing it against a Kalshi market returns `400`.

**Other notes**

*   `partial: true` indicates the requested range was truncated by an upstream availability limit. This only happens on Polymarket with `source=candlesticks` (the trade-based feed exposes a finite window of historical fills); Kalshi candles cover the full requested range, and `source=midpoint` on Polymarket also covers the full range.
*   When `partial` is `true`, `availableFrom` contains the earliest timestamp the response actually covers — data before that point is unavailable from the trade-based feed. To recover the missing range on Polymarket, repeat the call with `source=midpoint`; the response spans the full window at the cost of `volume = 0` on every candle (the midpoint feed carries quotes, not fills).
*   `availableFrom` is `null` when no trades exist in the entire requested range.
*   Candle timestamps are bucket-aligned (e.g. an `interval=1h` response has timestamps on the hour).

## Path parameters

- `id` string, required

## Query parameters

- `interval` '1m' | '5m' | '15m' | '1h' | '4h' | '1d' | '1w', required — OHLC candle bucket size. Each interval has its own maximum allowed time window; requests exceeding that window return `400`.
- `start` string, date-time, required
- `end` string, date-time, required
- `source` 'candlesticks' | 'midpoint' — Underlying data feed for OHLC candles. `candlesticks` (default) is trade-based with real in-bucket volume. `midpoint` uses a midpoint-quote feed with broader time-range coverage at the cost of `volume = 0` on every candle. `midpoint` is Polymarket-only.

## Response `200`

OK

- PredictionPriceHistoryResponse — Price-history response.
  - `data` PredictionPriceHistory, required — Historical OHLC candles for a market over a time window.
    - `marketId` string, required — Platform-native market identifier.
    - `platform` 'polymarket' | 'kalshi', required — Prediction-market platform identifier.
    - `interval` '1m' | '5m' | '15m' | '1h' | '4h' | '1d' | '1w', required — OHLC candle bucket size. Each interval has its own maximum allowed time window; requests exceeding that window return `400`.
    - `source` 'candlesticks' | 'midpoint', required — Underlying data feed for OHLC candles. `candlesticks` (default) is trade-based with real in-bucket volume. `midpoint` uses a midpoint-quote feed with broader time-range coverage at the cost of `volume = 0` on every candle. `midpoint` is Polymarket-only.
    - `candles` PredictionPriceCandle[], required — Candles in chronological order, bucket-aligned to `interval`.
      - `timestamp` string, date-time, required — ISO-8601 bucket-aligned start time of the candle.
      - `open` number, required — Opening price of the bucket.
      - `high` number, required — Highest price within the bucket.
      - `low` number, required — Lowest price within the bucket.
      - `close` number, required — Closing price of the bucket.
      - `volume` number, required — In-bucket trade volume. Always `0` when `source=midpoint` (the midpoint feed carries no volume data).
    - `partial` boolean, required — `true` when the requested range was truncated by an upstream availability limit. When `true`, `availableFrom` indicates the earliest timestamp the response actually covers.
    - `availableFrom` string, date-time, nullable, required — Earliest timestamp the response covers. Equals the requested `start` when `partial` is `false`. `null` when no trades exist in the entire requested range.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized. Not valid or inactive subscription key present in the HTTP Header.
- `403` — Forbidden. The request is authenticated, but it is not possible to perform the operation due to logical error or invalid permissions.
- `404` — Market not found on any supported platform.
- `500` — Internal server error. There was an error on the server during the processing of the request.

---

[API](https://skmtc.dev/tatum/apis/blockchain-data.md) · [All operations](https://skmtc.dev/tatum/apis/blockchain-data/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/tatum/blockchain-data/revisions/8622ee4b8fae/schema)
