Maxycharts APImaxycharts.com ↗
Access live Kalshi 15-minute crypto up/down market snapshots, historical settlement data, and order book depth via the Maxycharts API. Three endpoints, real-time data.
What is the Maxycharts API?
The Maxycharts API exposes three endpoints covering Kalshi 15-minute cryptocurrency up/down prediction markets as displayed on maxycharts.com. get_market_snapshot returns a live per-coin view including the target price, current UP/DOWN ask prices in cents, the 60-second rolling settlement average, time remaining, and 60 one-minute index candles. The other two endpoints cover historical market settlement records and real-time order book depth, giving developers a complete data set for a running or closed market window.
curl -X GET 'https://api.parse.bot/scraper/76a4188a-f728-4fbf-97e3-a12bfb372597/get_market_snapshot?coin=BTC' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace maxycharts-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: MaxyCharts SDK — live Kalshi 15-minute crypto market data."""
from parse_apis.maxycharts_com_api import MaxyCharts, Coin, InputNotFound
client = MaxyCharts()
# Fetch the current BTC 15-minute market snapshot.
snap = client.snapshots.get(coin=Coin.BTC)
print(f"{snap.coin} market_open={snap.market_open}")
if snap.market_open and snap.market is not None:
mkt = snap.market
print(f"Market: {mkt.title} ticker={mkt.ticker}")
print(f" Target: {snap.target} 60s Avg: {snap.avg_60s} Δ: {snap.avg_60s_vs_target}")
print(f" Closes in {snap.closes_in} ({snap.closes_in_seconds}s)")
print(f" UP {mkt.up_price_cents}¢ DOWN {mkt.down_price_cents}¢")
print(f" Yes bid/ask: {mkt.yes_bid}/{mkt.yes_ask} Volume: {mkt.volume}")
# Recent 1-minute candles of the settlement index.
for candle in snap.avg_60s_candles_1m[:3]:
print(f" {candle.time} O={candle.open} H={candle.high} L={candle.low} C={candle.close}")
# Drill into the market history using the ticker from the snapshot.
try:
history = client.market_histories.get(ticker=mkt.ticker)
except InputNotFound:
print("Market history not found for this ticker.")
raise
print(f"\nHistory: {history.ticker} settled={history.settled}")
print(f" Window: {history.window_start} → {history.window_end} candles={history.candle_count}")
if history.settled:
print(f" Result: {history.result} ({history.direction}) settlement={history.settlement_value}")
for candle in history.candles_1m[:3]:
print(f" {candle.time} O={candle.open} H={candle.high} L={candle.low} C={candle.close}")
# Order book depth for the same market.
book = client.order_books.get(ticker=mkt.ticker, depth=5)
print(f"\nOrder book: {book.ticker} side={book.side} spread={book.spread_cents}¢")
print(f" Best bid: {book.best_bid_cents}¢ Best ask: {book.best_ask_cents}¢")
for level in book.bids[:3]:
print(f" Bid {level.price_cents}¢ {level.contracts} contracts")
for level in book.asks[:3]:
print(f" Ask {level.price_cents}¢ {level.contracts} contracts")
print("\nexercised: snapshots.get / market_histories.get / order_books.get / Market / Candle / OrderLevel")
Returns one snapshot of the currently open Kalshi 15-minute up/down market for a coin, in two upstream round trips per coin. Fields: the market's target price (floor strike), the latest 60-second rolling average of the settlement index (labelled 60S AVG on the site; the value the market settles on) with its own timestamp, avg_60s minus target (positive = above target), the last 60 one-minute OHLC candles of that averaged index (each with its own start time), seconds remaining until close (plus MM:SS), the market's UP/DOWN ask prices in cents, bid/ask/last in dollars, volume and open interest, and three timestamps: quote_time (when the market quote was served), avg_60s_time (when the latest average sample was taken) and as_of (server time of the index series). All prices are USD. The raw second-by-second spot index and its one-minute volatility readout are not included: the site streams them only over a live socket. Markets roll every 15 minutes; if no market is open at the instant of the call, market_open is false and the numeric fields are null. Two input modes: with the single coin parameter (default) the payload is one snapshot object; with the comma-separated coins parameter the payload is {as_of, coins, snapshots: [one snapshot object per coin, in the order given], failed: [{coin, error, message} for any coin whose fetch failed]}. Each coin costs two round trips, so a 7-coin call makes 14. An unknown coin code in either parameter is rejected before any request.
| Param | Type | Description |
|---|---|---|
| coin | string | Coin whose 15-minute market to read. Case-insensitive code. Ignored when coins is supplied. |
| coins | string | Comma-separated coin codes for a multi-coin snapshot, e.g. BTC,ETH (case-insensitive, duplicates dropped). Each code must be a member of the Coin enum. When supplied the payload becomes the {as_of, coins, snapshots, failed} shape and coin is ignored. |
{
"type": "object",
"fields": {
"coin": "coin code echoed in upper case (single-coin mode)",
"as_of": "ISO UTC server time of the index series (single-coin mode) or of the batch (multi-coin mode)",
"coins": "multi-coin mode only: list of coin codes requested, in order",
"failed": "multi-coin mode only: array of {coin, error, message} for coins whose fetch failed (empty when all succeeded)",
"market": "object: ticker, event_ticker, title, open_time/close_time (ISO UTC), status, target, up_price_cents/down_price_cents (current ask for UP/DOWN in cents), yes_bid/yes_ask/no_bid/no_ask/last_price (dollars), volume, open_interest",
"target": "number, the market's target price in USD (same as market.target)",
"avg_60s": "number, latest 60-second rolling average of the settlement index in USD",
"closes_in": "same remaining time formatted MM:SS",
"snapshots": "multi-coin mode only: array of per-coin snapshot objects with the single-coin fields above",
"quote_time": "ISO UTC time the market quote (prices, volume, open interest) was served; compare with as_of/avg_60s_time to measure quote age",
"market_open": "boolean, false when no 15-minute market is currently open (numeric fields then null)",
"avg_60s_time": "ISO UTC timestamp of the avg_60s sample",
"avg_60s_vs_target": "number, avg_60s minus target (negative = below target)",
"closes_in_seconds": "integer seconds until the market closes (0 when past close)",
"avg_60s_candles_1m": "array of up to 60 one-minute OHLC candles of the averaged index, oldest first: time (ISO UTC start of the minute), open, high, low, close"
},
"sample": {
"data": {
"coin": "ETH",
"as_of": "2026-10-19T00:37:37Z",
"market": {
"title": "ETH price up in next 15 mins?",
"no_ask": 0.28,
"no_bid": 0.27,
"status": "active",
"target": 2405.23,
"ticker": "KXETH15M-26OCT182045-45",
"volume": 58225.72,
"yes_ask": 0.73,
"yes_bid": 0.72,
"open_time": "2026-10-19T00:30:00Z",
"close_time": "2026-10-19T00:45:00Z",
"last_price": 0.72,
"event_ticker": "KXETH15M-26OCT182045",
"open_interest": 19446.77,
"up_price_cents": 73,
"down_price_cents": 28
},
"target": 2405.23,
"avg_60s": 2408.8,
"closes_in": "07:23",
"quote_time": "2026-10-19T00:37:29Z",
"market_open": true,
"avg_60s_time": "2026-10-19T00:37:35Z",
"avg_60s_vs_target": 3.57,
"closes_in_seconds": 443,
"avg_60s_candles_1m": [
{
"low": 2402.91,
"high": 2403.05,
"open": 2403.01,
"time": "2026-10-18T23:38:00Z",
"close": 2403.05
},
{
"low": 2408.32,
"high": 2408.92,
"open": 2408.32,
"time": "2026-10-19T00:37:00Z",
"close": 2408.8
}
]
},
"status": "success"
}
}About the Maxycharts API
Live Market Snapshots
get_market_snapshot accepts either a single coin code or a comma-separated coins list for batch requests. Each result includes target (the floor strike price in USD), avg_60s (the current 60-second rolling average of the settlement index), closes_in (time remaining as MM:SS), and up_price_cents/down_price_cents from the live market quote. The market object carries the full Kalshi ticker, event ticker, open/close times, status, and volume. In multi-coin mode the response adds a snapshots array with per-coin objects and a failed array listing any coins whose data could not be retrieved.
Historical Market Records
get_market_history retrieves the complete record of a past or current 15-minute window. You can look up a market by its ticker (as returned by get_market_snapshot) or by combining coin with a close_time ISO UTC string — markets close on quarter-hour boundaries. The response includes settled (boolean), result (yes/no/null), direction (UP/DOWN/null), the final settlement_value, and up to 60 one-minute OHLC candles of the settlement index via candles_1m. The minutes parameter controls how many candles before close are returned (1–60).
Order Book Depth
get_order_book returns the live depth for any active market identified by ticker. All levels are expressed from the UP (yes) contract's perspective: bids are resting buy orders for UP (best price first), asks are offers to sell UP, and down_bids mirrors the asks in DOWN pricing. Each level carries price_cents, contracts, and cumulative_contracts. The depth parameter caps levels per side (1–50). spread_cents is the best-ask minus best-bid, null when either side is empty. book_time and close_time let you timestamp the snapshot relative to market expiry.
The Maxycharts API is a managed, monitored endpoint for maxycharts.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when maxycharts.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official maxycharts.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display a live Kalshi crypto market dashboard showing UP/DOWN prices and time remaining for multiple coins simultaneously using
coinsbatch mode - Backtest settlement-index behavior by retrieving
candles_1mfromget_market_historyfor closed BTC or ETH windows - Monitor order book imbalance between UP bids and asks in real time using
get_order_bookdepth levels andspread_cents - Alert when
avg_60scrossestargetfor a live market by pollingget_market_snapshotand comparing those two fields - Reconstruct final settlement outcomes for a date range by querying
get_market_historywith sequentialclose_timevalues and readingresultandsettlement_value - Visualize cumulative order book depth curves for UP and DOWN sides using
cumulative_contractsfromget_order_book - Track market direction accuracy over time by aggregating
directionandresultfields across historical market records
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Kalshi have an official developer API?+
avg_60s, closes_in, and spread_cents that are not directly returned by Kalshi's own endpoints.What does `get_market_history` return for a market that hasn't settled yet?+
settled will be false, result and direction will both be null, and settlement_value will not be present. The candles_1m array will contain candles up to the current minute within the window, and market.status will reflect the live exchange status rather than a finalized state.Which coins are supported by `get_market_snapshot`?+
coin and coins parameters accept any coin code for which Kalshi runs an active 15-minute up/down market — BTC and ETH are the primary examples shown on maxycharts.com. If a coin has no active market at the time of the request, it appears in the failed array in multi-coin mode with an error message.Does the API cover Kalshi markets other than 15-minute crypto up/down contracts?+
Is there a way to retrieve a full list of all historical market tickers for a coin?+
get_market_history resolves a specific market either by its ticker or by a coin plus close_time pair; there is no enumeration endpoint that returns all past tickers for a coin. You can fork this API on Parse and revise it to add a ticker-listing endpoint.