Get Kalshi Orderbook Summary
curl --request GET \
--url https://api.entityml.com/api/v1/kalshi/market/orderbook-summary \
--header 'Authorization: <authorization>'import requests
url = "https://api.entityml.com/api/v1/kalshi/market/orderbook-summary"
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/orderbook-summary', 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/orderbook-summary",
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/orderbook-summary"
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/orderbook-summary")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.entityml.com/api/v1/kalshi/market/orderbook-summary")
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>",
"date": "<string>",
"resolution_seconds": 123,
"data_points": 123,
"data": [
{
"timestamp": 123,
"quote_count": 123,
"is_forward_filled": true,
"best_bid": 123,
"best_bid_size": 123,
"best_ask": 123,
"best_ask_size": 123,
"mid_price": 123,
"spread": 123,
"best_bid_ohlc": {},
"best_ask_ohlc": {},
"mid_price_ohlc": {},
"spread_ohlc": {}
}
]
}Kalshi
Get Kalshi Orderbook Summary
Retrieve a bucketed best bid/best ask time series for a Kalshi market ticker on a UTC date or custom timestamp window.
GET
/
api
/
v1
/
kalshi
/
market
/
orderbook-summary
Get Kalshi Orderbook Summary
curl --request GET \
--url https://api.entityml.com/api/v1/kalshi/market/orderbook-summary \
--header 'Authorization: <authorization>'import requests
url = "https://api.entityml.com/api/v1/kalshi/market/orderbook-summary"
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/orderbook-summary', 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/orderbook-summary",
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/orderbook-summary"
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/orderbook-summary")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.entityml.com/api/v1/kalshi/market/orderbook-summary")
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>",
"date": "<string>",
"resolution_seconds": 123,
"data_points": 123,
"data": [
{
"timestamp": 123,
"quote_count": 123,
"is_forward_filled": true,
"best_bid": 123,
"best_bid_size": 123,
"best_ask": 123,
"best_ask_size": 123,
"mid_price": 123,
"spread": 123,
"best_bid_ohlc": {},
"best_ask_ohlc": {},
"mid_price_ohlc": {},
"spread_ohlc": {}
}
]
}Request
Headers
string
required
Bearer token. Example:
Bearer YOUR_API_KEYQuery Parameters
string
required
The Kalshi market ticker. Values are normalized to uppercase.
string
The UTC date to summarize, formatted as
YYYY-MM-DD. Required unless start_timestamp and end_timestamp are provided.integer
Inclusive lower timestamp bound in Unix seconds or milliseconds. Must be provided with
end_timestamp.integer
Inclusive upper timestamp bound in Unix seconds or milliseconds. Must be provided with
start_timestamp.integer
Time bucket resolution in seconds. Default:
60. Valid range: 1 to 3600.Use
date for a full UTC day, or use start_timestamp and end_timestamp for a custom UTC window. Custom windows hydrate book state from earlier records in the loaded UTC date partitions and emit buckets inside the requested range.Response
string
The Kalshi market ticker.
string
The requested date.
integer
The bucket size used to build the summary.
integer
Number of summary points returned.
array
Array of time buckets. Each bucket includes close values and OHLC candles:
Show Bucket fields
Show Bucket fields
integer
Bucket start timestamp in Unix milliseconds.
integer
Number of reconstructed top-of-book observations in this bucket. Forward-filled buckets use
0.boolean
true when no quote was observed in this bucket and values were carried forward from the previous bucket.number
Close value for the YES-side best bid in dollars.
number
Close size for the best bid.
number
Close value for the implied YES best ask derived from the NO book.
number
Close size for the best ask.
number
Close midpoint, computed as
(best_bid + best_ask) / 2 when both sides are present.number
Close spread, computed as
best_ask - best_bid when both sides are present.object
OHLC values for every best-bid quote observed inside the bucket.
object
OHLC values for every best-ask quote observed inside the bucket.
object
OHLC values for every midpoint observed inside the bucket.
object
OHLC values for every spread observed inside the bucket.
Kalshi records from
2026-03-31 through 2026-04-24 can have null price payloads for affected tickers. In that window, summaries can show quote_count without populated bid, ask, midpoint, or spread values. See Data Quality.Example
from entityml import EntityMLClient
client = EntityMLClient(api_key="YOUR_API_KEY")
summary = client.kalshi.get_orderbook_summary(
ticker="KXBTC-26FEB2606-B60125",
start_timestamp=1772103600000,
end_timestamp=1772107199999,
resolution=60,
)
print(summary["data_points"])
export ENTITY_API_KEY="YOUR_API_KEY"
entityml kalshi orderbook-summary \
--ticker KXBTC-26FEB2606-B60125 \
--start-timestamp 1772103600000 \
--end-timestamp 1772107199999 \
--resolution 60
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.entityml.com/api/v1/kalshi/market/orderbook-summary?ticker=KXBTC-26FEB2606-B60125&start_timestamp=1772103600000&end_timestamp=1772107199999&resolution=60"
Example response
{
"market_ticker": "KXBTC-26FEB2606-B60125",
"date": null,
"start_timestamp": 1772103600000,
"end_timestamp": 1772107199999,
"resolution_seconds": 60,
"data_points": 1,
"data": [
{
"timestamp": 1772103660000,
"quote_count": 3,
"is_forward_filled": false,
"best_bid": 0.58,
"best_bid_size": 12,
"best_ask": 0.6,
"best_ask_size": 14,
"mid_price": 0.59,
"spread": 0.02,
"best_bid_ohlc": { "open": 0.57, "high": 0.58, "low": 0.57, "close": 0.58 },
"best_ask_ohlc": { "open": 0.61, "high": 0.61, "low": 0.6, "close": 0.6 },
"mid_price_ohlc": { "open": 0.59, "high": 0.595, "low": 0.585, "close": 0.59 },
"spread_ohlc": { "open": 0.04, "high": 0.04, "low": 0.02, "close": 0.02 }
}
]
}