Tick-level Data
Get order book snapshot
Full-depth order book at a timestamp, reconstructed from recorded book snapshots and deltas.
POST/v1/order-book/athosted · Synpath API key
Hosted by Synpath. Authentication: Authorization: Bearer <Synpath API key>. Venue coverage: Kalshi.
Returns the order book as it stood at as_of_ms. The book is replayed from every snapshot and delta the venue published up to that time, so it is the exact state, not a sampled one.
book is null where the dataset has no coverage at as_of_ms; absence_reason says why. Coverage is per market and has gaps.
Request body
| Name | Type | Description |
|---|---|---|
market_id | string | Synpath market id, venue:native. |
as_of_ms | integer | Timestamp to value the book at, Unix milliseconds. |
side | stringdefault yes | yes or no: which side's book to return. |
depth | integer | Price levels per side. All levels when omitted. |
Response fields
| Name | Type | Description |
|---|---|---|
metadata.dataset_version | string | Processed dataset the answer was read from. Pin it when comparing answers. |
metadata.time_basis | string | recorder_receive: every timestamp below is the time the recorder received the event. |
metadata.processed_through_ms | integer | Latest time the dataset covers. |
book | object | The order book, or null outside coverage. |
book.bids, book.asks | array | Price levels, best first: {price, size} in the YES price, size in contracts. |
book.as_of_ms | integer | The time the book is valued at. |
book.timestamp | integer | Recorder receive time of the last update applied. Earlier than as_of_ms when the book was unchanged. |
book.venue_timestamp_ms | integer | The venue's own time for that update, when it sent one; else null. |
absence_reason | string | Why book is null: outside_loaded_data, or a recorder gap. null when a book is returned. |
Response
200 with the book, or with book: null and an absence_reason. 404 for an unknown market.
import synpath
# needs SYNPATH_API_KEY
at = synpath.fetch_order_book_at("kalshi:KXQUANTUM-30", as_of_ms=1789509599000, depth=2)
if at.book is None:
print("no coverage:", at.absence_reason)
else:
print(at.book.best_bid, at.book.best_ask, at.metadata.dataset_version)200
{
"metadata": {
"dataset_version": "processed-v1-623446e80ca97c2b",
"time_basis": "recorder_receive",
"processed_through_ms": 1789725040929
},
"market_id": "kalshi:KXQUANTUM-30",
"as_of_ms": 1789509599000,
"book": {
"market_id": "kalshi:KXQUANTUM-30",
"side": "yes",
"venue": "kalshi",
"bids": [
{
"price": 0.331,
"size": 66
},
{
"price": 0.33,
"size": 500
}
],
"asks": [
{
"price": 0.36,
"size": 10
},
{
"price": 0.37,
"size": 50
}
],
"timestamp": 1789509152200,
"datetime": "2026-09-15T21:52:32.200Z",
"book_model": "shared_complement",
"derived": true,
"depth_scope": "top_n",
"info": {
"...": "the venue's payload"
},
"as_of_ms": 1789509599000,
"venue_timestamp_ms": null,
"best_bid": {
"price": 0.331,
"size": 66
},
"best_ask": {
"price": 0.36,
"size": 10
}
},
"absence_reason": null
}
