Sardine for developers

A Kalshi 15-minute data API and an MCP server. Historical settlement rates, the live board, a scored public record, and a backtest that replays a strategy on per-second Kalshi quotes after fees. Free during the preview.

What the data is

Sardine's tables are counts: for Kalshi BTC, ETH and XRP 15-minute contracts, how often a contract this far from the strike with this much time left actually settled Up, counted from the last 60 days of settled windows, 5,697 windows per series as of 2026-10-26, rebuilt daily. Every number the board shows is written down the moment it is shown and scored against Kalshi's settled result on the record.

What it is not

It is not a forecast and not advice. Kalshi's own price is usually closer to the result than the count is: at ten minutes before close Kalshi's Brier score is 0.194 against Sardine's 0.195 over 2,571 windows. No market currently shows a tradeable edge, so the board calls nothing cheaper or pricier. The public record shows the misses by price bucket rather than hiding them.

The three calls to make first

No key needed for these three; the backtest needs a free key. Add format=csv to any of them for a file that opens in a spreadsheet.

curl "https://sardine.info/v1/markets"

Returns the series covered (BTC-15M, ETH-15M, XRP-15M, BTC-1H, ETH-1H), the windows each table was built from, and its split-half self-check figure against the 6-point limit.

curl "https://sardine.info/v1/board?market=BTC-15M"

Returns the contracts open right now: ticker, strike, minutes left, the historical count, its 95% interval and the sample size. Kalshi's live prices are not included, pending Kalshi's Redistribution licence: read them from Kalshi's own API and pass kalshi_ask to the next call for the fee and the gap.

curl "https://sardine.info/v1/settlement-rate?asset=BTC&window_minutes=15&strike=79850&minutes_left=7"

Returns one situation's historical rate: how often BTC this far from a strike of $79,850 with 7 minutes left settled Up, with the interval and the number of past windows behind it. Pass kalshi_ask=0.54, the ask you read from Kalshi, to get the fee and the gap too.

Then the backtest (paused during the licence review), which replays a rule second by second on recorded Kalshi quotes, with Kalshi's real fee, fills only up to the size on the book, a 2-second order delay and official settlement. Without dates a run covers the most recent 14 days; a run may span at most 21 days:

curl "https://sardine.info/v1/backtest?market=BTC-15M&side=NO&min_gap_cents=5&min_minutes_left=2&max_minutes_left=5"

It returns results, never rows: profit per contract with a 95% interval, a zero-delay comparison, stability across weeks, breakdowns and warnings. The per-second archive itself is not served.

The full description is at /v1/openapi.json.

The MCP server

The same data for an assistant or a coding agent. Local, through the Python package sardine-mcp:

claude mcp add sardine -- uvx sardine-mcp

Or in a Claude Desktop or Cursor config file:

{ "mcpServers": { "sardine": { "command": "uvx", "args": ["sardine-mcp"] } } }

Remote, for ChatGPT connectors, Claude.ai custom connectors and other cloud agents: https://sardine.info/mcp (streamable HTTP).

ToolWhat it answers
list_marketsWhich series are covered and how well each table has held up.
get_settlement_rate"BTC is $40 below the strike with 7 minutes left. How often has that settled Up?" With the interval, the sample size, and Kalshi's fee if you pass the ask.
get_live_boardThe contracts open right now with the historical count for each. Kalshi's prices are not included; read them from Kalshi's API.
get_rate_tableThe whole lookup table (distance by time left) for one series.
get_track_recordWhat Sardine published against what settled, by price bucket.
list_datasetsThe downloadable CSV history files.
backtest_rule"Would this rule have made money?" Replayed on per-second Kalshi quotes with fees, realistic fills and official settlement. Results only. Needs a free key.

There is also one resource, sardine://method, a plain description of how the numbers are made.

Limits and keys

Free with signup: a key is an email address, no card, and gives 10,000 calls a day. Without a key you get 25 calls a day to try it. The key also lets us tell you before anything changes: sardine.info/signup, an email address, no card. The preview is free; if a paid tier ever exists it will be announced to key holders first and the free tier stays.

Licence and credit

Aggregates, tables and CSV files are CC BY 4.0. Use them, publish them, check our arithmetic with them; credit "Sardine (sardine.info)". Every response carries "attribution": "Powered by Kalshi Research", and board rows link to the Kalshi market they describe; keep both when you show Kalshi-derived figures. Market prices are Kalshi's and are governed by Kalshi's data terms: this API and the MCP server do not redistribute Kalshi's live prices, per-contract price history or order books while Kalshi's Redistribution licence is pending; read prices from Kalshi's own API. The backtest reads Sardine's recordings on our side and returns results only, to callers with a free key.

A prompt for your assistant

Use the Sardine MCP server (uvx sardine-mcp, or https://sardine.info/mcp).
First call list_markets and get_track_record so you know how accurate the
tables have been. Then, for the Kalshi BTC 15-minute contract I name, call
get_settlement_rate with its strike and minutes left, and tell me the rate,
the interval and the sample size beside the Kalshi price I give you. Treat the rate as a
count of past windows, not a forecast. If I propose a rule, run backtest_rule
with fees on and report profit per contract with its interval and the
warnings, before any opinion.

Licence review

Sardine has applied to Kalshi for a data licence (October 2026). While Kalshi reviews it, the backtest (/v1/backtest, backtest_rule, backtest_signals) answers 503 with "status": "licence_review" to everyone. Keys stay valid, every other endpoint works, and the backtest comes back the day the licence is approved. Nothing on this site costs money during the review.

Facts you can quote

Every page on this site carries its as-of date. Cite as: Sardine (sardine.info), CC BY 4.0.