Skip to main content
GET
/
historical
/
markets
Get Historical Markets
curl --request GET \
  --url https://external-api.kalshi.com/trade-api/v2/historical/markets
import requests

url = "https://external-api.kalshi.com/trade-api/v2/historical/markets"

response = requests.get(url)

print(response.text)
const options = {method: 'GET'};

fetch('https://external-api.kalshi.com/trade-api/v2/historical/markets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://external-api.kalshi.com/trade-api/v2/historical/markets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://external-api.kalshi.com/trade-api/v2/historical/markets"

req, _ := http.NewRequest("GET", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://external-api.kalshi.com/trade-api/v2/historical/markets")
.asString();
require 'uri'
require 'net/http'

url = URI("https://external-api.kalshi.com/trade-api/v2/historical/markets")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
{
  "markets": [
    {
      "ticker": "<string>",
      "event_ticker": "<string>",
      "yes_sub_title": "<string>",
      "no_sub_title": "<string>",
      "created_time": "2023-11-07T05:31:56Z",
      "updated_time": "2023-11-07T05:31:56Z",
      "open_time": "2023-11-07T05:31:56Z",
      "close_time": "2023-11-07T05:31:56Z",
      "latest_expiration_time": "2023-11-07T05:31:56Z",
      "settlement_timer_seconds": 123,
      "yes_bid_dollars": "0.5600",
      "yes_bid_size_fp": "10.00",
      "yes_ask_dollars": "0.5600",
      "yes_ask_size_fp": "10.00",
      "no_bid_dollars": "0.5600",
      "no_ask_dollars": "0.5600",
      "last_price_dollars": "0.5600",
      "volume_fp": "10.00",
      "volume_24h_fp": "10.00",
      "can_close_early": true,
      "open_interest_fp": "10.00",
      "notional_value_dollars": "0.5600",
      "previous_yes_bid_dollars": "0.5600",
      "previous_yes_ask_dollars": "0.5600",
      "previous_price_dollars": "0.5600",
      "expiration_value": "<string>",
      "rules_primary": "<string>",
      "rules_secondary": "<string>",
      "price_level_structure": "<string>",
      "price_ranges": [
        {
          "start": "<string>",
          "end": "<string>",
          "step": "<string>"
        }
      ],
      "title": "<string>",
      "subtitle": "<string>",
      "expected_expiration_time": "2023-11-07T05:31:56Z",
      "expiration_time": "2023-11-07T05:31:56Z",
      "liquidity_dollars": "0.5600",
      "settlement_value_dollars": "0.5600",
      "settlement_ts": "2023-11-07T05:31:56Z",
      "occurrence_datetime": "2023-11-07T05:31:56Z",
      "fee_waiver_expiration_time": "2023-11-07T05:31:56Z",
      "early_close_condition": "<string>",
      "floor_strike": 123,
      "cap_strike": 123,
      "functional_strike": "<string>",
      "custom_strike": {},
      "mve_collection_ticker": "<string>",
      "mve_selected_legs": [
        {
          "event_ticker": "<string>",
          "market_ticker": "<string>",
          "side": "<string>",
          "yes_settlement_value_dollars": "0.5600"
        }
      ],
      "primary_participant_key": "<string>",
      "is_provisional": true,
      "exchange_index": 0
    }
  ],
  "cursor": "<string>"
}
{
"code": "<string>",
"message": "<string>",
"details": "<string>",
"service": "<string>"
}
{
"code": "<string>",
"message": "<string>",
"details": "<string>",
"service": "<string>"
}

Query Parameters

limit
integer<int64>
default:100

Number of results per page. Defaults to 100. Maximum value is 1000.

Required range: 0 <= x <= 1000
cursor
string

Pagination cursor. Use the cursor value returned from the previous response to get the next page of results. Leave empty for the first page.

tickers
string

Filter by specific market tickers. Comma-separated list of market tickers to retrieve.

event_ticker
string

Event ticker to filter by. Only a single event ticker is supported.

series_ticker
string

Filter by series ticker

mve_filter
enum<string> | null

Filter by multivariate events (combos). By default, MVE markets are included.

Available options:
exclude

Response

Historical markets retrieved successfully

markets
object[]
required
cursor
string
required