Get Kalshi Market Data Range
curl --request GET \
--url https://api.entityml.com/api/v1/kalshi/market/data/range \
--header 'Authorization: <authorization>'import requests
url = "https://api.entityml.com/api/v1/kalshi/market/data/range"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.entityml.com/api/v1/kalshi/market/data/range', 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://api.entityml.com/api/v1/kalshi/market/data/range",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$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://api.entityml.com/api/v1/kalshi/market/data/range"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.entityml.com/api/v1/kalshi/market/data/range")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.entityml.com/api/v1/kalshi/market/data/range")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"market_ticker": "<string>",
"start_timestamp": 123,
"end_timestamp": 123,
"data_count": 123,
"data": [
{}
],
"pagination": {
"limit": 123,
"has_more": true,
"next_cursor": "<string>"
}
}Kalshi
Get Kalshi Market Data Range
Retrieve raw Kalshi market events across an inclusive timestamp range using cursor pagination.
GET
/
api
/
v1
/
kalshi
/
market
/
data
/
range
Get Kalshi Market Data Range
curl --request GET \
--url https://api.entityml.com/api/v1/kalshi/market/data/range \
--header 'Authorization: <authorization>'import requests
url = "https://api.entityml.com/api/v1/kalshi/market/data/range"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.entityml.com/api/v1/kalshi/market/data/range', 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://api.entityml.com/api/v1/kalshi/market/data/range",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$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://api.entityml.com/api/v1/kalshi/market/data/range"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.entityml.com/api/v1/kalshi/market/data/range")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.entityml.com/api/v1/kalshi/market/data/range")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"market_ticker": "<string>",
"start_timestamp": 123,
"end_timestamp": 123,
"data_count": 123,
"data": [
{}
],
"pagination": {
"limit": 123,
"has_more": true,
"next_cursor": "<string>"
}
}Request
Headers
string
required
Bearer token. Example:
Bearer YOUR_API_KEYQuery Parameters
string
required
The Kalshi market ticker. Values are normalized to uppercase.
integer
required
Inclusive lower timestamp bound. Accepts Unix seconds or milliseconds.
integer
required
Inclusive upper timestamp bound. Accepts Unix seconds or milliseconds.
string
Opaque cursor returned by the previous page for the same ticker and timestamp range.
integer
Maximum number of records to return per page. Default:
10000. Max: 100000.Response
string
The normalized Kalshi market ticker.
integer
Inclusive lower timestamp bound normalized to milliseconds.
integer
Inclusive upper timestamp bound normalized to milliseconds.
integer
Number of records returned in the current page.
array
Array of raw Kalshi records matching the requested range. Record shapes vary by event type.
object
Example
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.entityml.com/api/v1/kalshi/market/data/range?ticker=KXBTC-26FEB2606-B60125&start_timestamp=1772103600000&end_timestamp=1772107199999&limit=500"
import os
import requests
response = requests.get(
"https://api.entityml.com/api/v1/kalshi/market/data/range",
headers={"Authorization": f"Bearer {os.environ['ENTITY_API_KEY']}"},
params={
"ticker": "KXBTC-26FEB2606-B60125",
"start_timestamp": 1772103600000,
"end_timestamp": 1772107199999,
"limit": 500,
},
)
print(response.json())
Example response
{
"market_ticker": "KXBTC-26FEB2606-B60125",
"start_timestamp": 1772103600000,
"end_timestamp": 1772107199999,
"data_count": 1,
"data": [
{
"type": "snapshot",
"ticker": "KXBTC-26FEB2606-B60125",
"timestamp": "2026-02-26T11:01:16.000623+00:00",
"epoch_ms": 1772103676000,
"seq": null,
"yes": [],
"no": [[40, 14], [39, 290.81]]
}
],
"pagination": {
"limit": 500,
"has_more": false,
"next_cursor": null
}
}
next_cursor is opaque. Pass it back unchanged with the same ticker, start_timestamp, and end_timestamp to continue paging when has_more is true.