Discover/Maxycharts API
live

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.

Endpoint health
monitored
get_order_book
get_market_history
get_market_snapshot
Checks pendingself-healing
Endpoints
3
Verified account required
Updated
1h ago

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.

This call costs2 credits / call— charged only on success
Try it
Coin whose 15-minute market to read. Case-insensitive code. Ignored when coins is supplied.
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.
→ api.parse.bot/scraper/76a4188a-f728-4fbf-97e3-a12bfb372597/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
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'
Python SDK · recommended

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")
All endpoints · 3 totalmissing one? ·

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.

Input
ParamTypeDescription
coinstringCoin whose 15-minute market to read. Case-insensitive code. Ignored when coins is supplied.
coinsstringComma-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.
Response
{
  "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.

Reliability & maintenance

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?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Display a live Kalshi crypto market dashboard showing UP/DOWN prices and time remaining for multiple coins simultaneously using coins batch mode
  • Backtest settlement-index behavior by retrieving candles_1m from get_market_history for closed BTC or ETH windows
  • Monitor order book imbalance between UP bids and asks in real time using get_order_book depth levels and spread_cents
  • Alert when avg_60s crosses target for a live market by polling get_market_snapshot and comparing those two fields
  • Reconstruct final settlement outcomes for a date range by querying get_market_history with sequential close_time values and reading result and settlement_value
  • Visualize cumulative order book depth curves for UP and DOWN sides using cumulative_contracts from get_order_book
  • Track market direction accuracy over time by aggregating direction and result fields across historical market records
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does Kalshi have an official developer API?+
Yes. Kalshi publishes an official REST API documented at https://trading-api.readme.io/reference/getting-started. The Maxycharts API surfaces a curated subset of that data focused specifically on the 15-minute crypto up/down markets as shown on maxycharts.com, with pre-computed fields like 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`?+
The 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?+
Not currently. The three endpoints cover only the 15-minute crypto up/down format: live snapshots, historical settlement records, and order book depth for those specific markets. You can fork this API on Parse and revise it to add endpoints for other Kalshi market types or event categories.
Is there a way to retrieve a full list of all historical market tickers for a coin?+
Not currently. 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.
Page content last updated . Spec covers 3 endpoints from maxycharts.com.
Related APIs in FinanceSee all →