> For the complete documentation index, see [llms.txt](https://resolvedmarkets.com/llms.txt). Every docs page is also served as Markdown: append `.md` to its URL or send `Accept: text/markdown`.

# Changelog

## Aug 29, 2026 — AI agents can now find the exchange data

- The installable skill and plugin now describe the exchange endpoints, so a coding agent knows on its own that it can pull Hyperliquid perpetual order books next to the prediction markets and line the two up. Before this it had to be told those endpoints existed.

## Aug 27, 2026 — How much is available at the best price

A cheap way to ask how much you could actually buy or sell right now, without downloading the whole order book to find out.

- Add `?touchsize=true` to a snapshots request and every row gains `best_bid_size` and `best_ask_size` — the number of shares resting at the best bid and the best ask. This matters because a price on its own does not tell you whether you could trade there: a market can show a tempting price backed by only a handful of shares. The response is roughly a third the size of asking for the full order book, so this is the cheap option when the top of the book is all you need. It is included automatically when you ask for `includebook`.
- Trades now carry the Polygon `transaction_hash` and the fee rate that was charged. The hash ties one of our trades to its record on the Polygon chain by an exact key, which is the only reliable way to do it — timestamps will not serve, because a block’s time is recorded to the whole second while our trade times are the exchange’s own millisecond match time, so matching the two on time drops most rows.
- Fixed: asking for `touchsize` together with `interval` used to succeed while quietly leaving the two size columns out of the response. An `interval` request combines many order books into a single candle, so there is no one "best price" left to report a size for. Rather than return a response that is silently missing what you asked for, the combination now returns a clear error explaining why.

## Aug 26, 2026 — What number a crypto market settled against

- Market metadata now tells you the price a crypto up/down market had to beat (`price_to_beat`), the price it actually settled at (`final_price`), and how long a window was averaged to produce it (`twap_lookback_seconds`). This closes a gap that made settled markets hard to study: you could see the market close, but not the number it was judged against, so you could not check a strategy’s calls against the real outcome.
- This applies to the 5-minute, 15-minute and 4-hour markets, which settle against a Chainlink time-weighted average price rather than a single quote at the closing bell — which is why a market can look like it closed above the line and still settle below it. `final_price` is empty while a market is still running, and all three fields are empty on the market types that still settle against Binance.

## Aug 21, 2026 — Backtests that match what really traded

Three changes to how the simulator fills orders. Your results will move, and usually downward — the old numbers were flattering in ways that would not have survived live trading.

- Stops and take-profits now check real trades, not just our order book snapshots. We record a snapshot roughly every 50 milliseconds, and the price can move between two of them, so a stop level could be crossed at a moment we have no snapshot for — the backtest would sail past it and exit later, at a better price than you would really have got. Checking the trades that actually printed means an exit can only ever land earlier than before, never later.
- Orders now fill across several price levels instead of pretending the whole order goes through at the best one. The best price usually holds very little: at the moment a stop triggers, the typical amount resting there is about 54 shares. A $100 order would have needed a second price level three quarters of the time, and a $1,000 order almost always.
- If the price moves while your order is being filled and the fill lands outside the range your strategy asked for, the trade is now skipped instead of being opened at a price you never wanted. This was doing real damage: on one run, entries meant for the 0.88–0.92 band filled as far away as 0.79 and 0.97, and the badly-slipped ones were exactly the trades that then stopped out — because a fill that far off means you bought into the move. Skipped entries are counted and shown as `summary.entryGuard`, so your trade count never shrinks without telling you why.
- Candle downsampling now happens before the data reaches you, and keeps the true high and low within each candle instead of flattening them away.

## Aug 20, 2026 — Requests do what they say

Four places where the API accepted your request and then quietly served you something different — the kind of bug you only find months later when the numbers do not add up.

- Asking for more rows than a route allows now returns an error instead of silently returning fewer. If you were paging by your own page size, this is the bug that made you skip rows without noticing: ask for 5,000, get 2,000, advance your offset by 5,000, and 3,000 rows vanish from every page. The ceilings are 5,000 rows normally, 2,000 when you include the full order book, and 50,000 when you use `interval`.
- That 50,000-row ceiling for `interval` was documented but impossible to reach — a shared check rejected anything above 5,000 before the request got far enough to use it. The documentation was describing a call the API refused to make. It works now.
- `limit` and `offset` on `/v1/markets/live` were accepted and then ignored, so `?limit=10` handed back the entire list of roughly two thousand markets. They now work, and a limited response is sorted by which market expires soonest — so `?limit=1` gives you the market closing next, rather than whichever one happened to come first in an unsorted list.
- Documentation fix: `sequence_number` counts the order book updates we applied for a token. It is not a way to detect missing data, which is what our docs used to claim. Healthy consecutive rows normally jump by more than one — about 98% of them do — and the count restarts from 1 whenever a market rolls over. Anyone using it as a gap detector was flagging almost all of their good data as broken.

## Aug 19, 2026 — Tennis: ATP and WTA

- Both tours are now collected, under `category=sports` with `subcategory=ATP` or `WTA`. For each match you get the match winner, the individual set winners, and the set handicap. The over/under ladders on games and totals are not covered; between them they account for well under 1% of the money traded on a match.
- Every market within a match now has a name you can tell apart from the others. Polymarket’s own labels are not unique, and the failure was not cosmetic: "Completed Match" is the label on every single match on tour, and the two sides of a set handicap share one label while listing their players in opposite order. Reading the label alone could hand you the wrong player.
- One thing that looks like a bug and is not: during a live match you will occasionally see a book where the best bid is above the best ask. That is genuinely what the exchange is showing — a tiny leftover order sitting on the wrong side of a much larger one while prices move fast. We publish it as-is rather than tidying it up, because the alternative is inventing a book that never existed.

## Aug 19, 2026 — Backtests that finish, and code you can read

- Running a backtest from the visual builder could hang for minutes and then fail. A run now stays within the date range of the markets it actually picked, which is what fixes it. If you set a date range yourself you were never affected — this only hit the default "most recent settled markets" run, which is exactly what the builder sends.
- The Python the AI agent writes is now shown in a proper code view with syntax highlighting and line numbers, so you can actually read and check the strategy that produced your results rather than taking them on trust.

## Aug 18, 2026 — Your past backtest runs are kept

- The AI backtest agent now remembers previous runs. You can reopen an earlier conversation and get the strategy, the code it generated and the results back, instead of losing all of it the moment you navigate away.

## Aug 17, 2026 — Better weather answers, and no false warnings on thin exits

- Asking the backtest agent about a specific temperature bucket now works however you write it — "30°C", "30 C" and "30" all resolve to the same market. When a bucket genuinely has too little data, the message tells you how much was actually there instead of failing vaguely.
- Fixed: a trade that could only be partly filled — because the order book did not hold enough to close the whole position — triggered warnings about mismatched profit and impossible trade sizes. The trade was correct; the checks were comparing it against a simpler model that assumed every position closes in one go. On one ETH hourly run this fired on 15 trades that were all perfectly valid.

## Aug 16, 2026 — History pages stay in order

- A few rows on each history page could arrive out of the newest-first order everyone sorts by, and report a `snapshot_count` of 2 for markets that actually hold thousands of snapshots. Anything ranking or filtering on that count was being misled. Measured on `?category=equities`, three rows per page were affected. Both are fixed.

## Aug 15, 2026 — Historical lookups return the right market

- `/v1/markets/history` reported the wrong `timeframe` for some markets, because it trusted a category tag that disagreed with the market’s own record. Ask for hourly markets and you could get five-minute ones mixed in. It now reads the value from the market record itself.
- Some responses returned the same token as both the UP side and the DOWN side of a market, which makes any calculation built on sides quietly wrong. Sides are now worked out from the token id, and a market with no side recorded no longer defaults to UP — that default was stamping "UP" onto tokens that were demonstrably the other side.

## Aug 14, 2026 — Candles you can actually trade against

Downsampled candles gained the two things that made them unusable for testing a strategy: the extremes inside each bar, and real quotes instead of averages.

- Every `interval` bucket now includes `min_best_bid` and `max_best_bid` — the lowest and highest bid within that bar. This matters because downsampling hides what happens between samples, and that is exactly where a stop or a target gets hit. On a four-minute grid we measured a 0.20 stop that appeared to fill somewhere between 0.11 and 0.15, when the underlying ticks show the bid stepping down one cent at a time and the fill was real at 0.20. With the bar’s high and low you can ask "was my level touched inside this bar?" and fill at the level, the way bar-based backtests have always worked.
- Buckets also include `last_best_bid`, `last_best_ask`, `last_bid_depth` and `last_ask_depth` — the final quote in the bucket rather than an average across it. An average of a 0.20 bid and a 0.30 bid is 0.25, a price nobody ever offered, so anything that has to fill at a real quote could not use the averaged columns at all. With these you can ask for downsampled data and still get prices that existed: on one 15,639-row market it turned 4 requests and 15,639 rows into a single request and 1,196 rows.

## Aug 13, 2026 — The AI agent understands weather markets and date ranges

- You can now ask the backtest agent about daily temperature markets, not just crypto. It understands how the temperature buckets are laid out — a row of "will the high be 72–73°F" style markets rather than a simple up-or-down pair — and how to choose between them.
- You can give the agent an explicit date range and it will pick markets from that period, instead of always defaulting to the most recently settled ones. That makes it possible to test the same idea across different market conditions rather than only the last few days.

## Aug 12, 2026 — Complete data at the open of every crypto market

Short crypto markets used to be missing data in the seconds around their opening. That was the largest gap in our coverage, and it is closed.

- A new crypto market is now recorded from before its official start. These markets really are traded ahead of the opening bell — sometimes with a full order book more than ten minutes early — and none of that early activity was being captured.
- You can check our coverage rather than taking our word for it. `GET /v1/coverage/summary` and `/v1/coverage/gaps` work out every market window that should exist from the clock, compare it against what was actually captured, and report anything missing.

## Aug 8, 2026 — Why a backtest traded fewer markets than you asked for

- Ask for 20 markets, get "11 trades across 20 markets", and there was no way to find out what happened to the other nine. Results now include a breakdown of where markets dropped out: how many were found, how many were discarded for having too little data, how many the strategy looked at and passed on, and how many actually traded. When a run comes back thinner than you expected, this tells you whether the problem is your filters, our data, or your strategy.

## Aug 7, 2026 — Two backtest statistics were wrong

Both made results look better than they were, so re-run anything you judged on these numbers.

- The figure reported as "Sharpe" was actually the t-statistic, which grows with the number of trades regardless of how good the strategy is — so a longer run of identical quality scored higher than a shorter one. `sharpe` is now the real per-trade ratio, and the t-statistic is reported separately as `tStat`, which is the right number for the different question of whether an edge is distinguishable from noise.
- Maximum drawdown was reported as a percentage of capital that was being reverse-engineered from profit and loss, and the calculation collapsed on any losing trade — turning a $50 position into an apparent $289,500 and dividing the drawdown by roughly 5,790. A genuine 43.9% drawdown was being displayed as 0.0076%. It now sums the actual stakes, which were recorded on every trade all along.

## Aug 6, 2026 — MCP server: two new tools

- The MCP server now offers 14 tools to AI agents. `get_market_metadata` reports how a market resolved, so an agent can check its own reasoning against the real outcome, and `get_trades` reports what actually changed hands as opposed to what was merely being quoted.
- Fixed: the `timeframe` input accepted only five values and rejected the other sixteen before the request ever reached us — so an agent asking about weather or sports markets got a confusing schema error rather than data. Any timeframe works now, and `list_categories` will tell an agent which ones are live rather than leaving it to guess.

## Aug 5, 2026 — Skill and plugin for AI agents

- An installable skill and plugin hand a coding agent the whole API in one step, alongside the hosted MCP server — so Claude Code, Cursor or Codex can query market data without you writing the client.
- The full reference is also published as plain text at `/llms.txt`, which an agent can read in a single request instead of crawling the documentation site.

## Aug 2, 2026 — Tidier responses outside crypto

- Live order book responses for sports, weather and equities markets no longer carry the crypto-only fields `crypto` and `crypto_price`, which were always blank on them and only invited the question of why they were empty.
- Several MCP tool descriptions were corrected. They quoted limits and refresh rates that had not been true for some time, which meant an AI agent reading them formed the wrong idea of what it could ask for.

## Aug 1, 2026 — Date filters that actually filter

Three ways a filtered request could come back wrong. Two of them failed silently, which is the worse kind.

- A date written in the most common ISO format — `2026-05-01T00:00:00Z`, with the trailing `Z` and no milliseconds — made every date-filtered request fail with a server error. Any of the usual date formats work now.
- `from` and `to` were accepted on the market history endpoints and then ignored, because those routes filter with `since` and `before`. You got the full unfiltered list back with nothing to indicate your date range had been dropped — so a query for last May quietly answered with everything. They now return a clear error naming the parameters that route actually uses.
- Hyperliquid rows in the history list were skipping the coin, timeframe and plan filters that applied to every other row, so a filtered request could hand back markets it should have excluded. Every filter is now applied to those rows too.

## Jul 31, 2026 — Three more coins

- DOGE, HYPE and BNB added across every timeframe, bringing coverage to seven coins: BTC, ETH, SOL, XRP, DOGE, HYPE and BNB.
- HYPE reference prices come from Hyperliquid rather than Binance, which does not list the pair — so the underlying price you see alongside a HYPE market is taken from the exchange where HYPE actually trades.
- Daily "what price will BTC hit today" markets arrive at the same time, under `timeframe=hit-price` rather than `1d`. They work quite differently from the up/down markets — a row of price targets rather than a single yes/no — and keeping them under their own name means `?crypto=BTC&timeframe=1d` still returns just the one daily up/down market it always did.

## Jul 30, 2026 — Four-hour crypto markets

- A new `timeframe=4h`, on windows running 00/04/08/12/16/20 Eastern. Polymarket lists the next window while the current one is still trading, so a request will normally return two of them — the one with the smaller `expiresIn` is the window running right now.

## Jul 26, 2026 — Weather: 51 cities

- Daily temperature markets went from 18 cities to 51, each covering both today and tomorrow. Filter with `subcategory` set to the full city name, for example `subcategory=Hong Kong`.

## Jul 25, 2026 — The trade tape, and how fresh each quote was

- `GET /v1/markets/:id/trades` exposes the trade tape: every fill we captured for a market, with its price, size and side. We had been recording this all along without serving it, so until now you could see what people were willing to trade — the order book — but not what actually changed hands. The two line up: trades and snapshots share the market and timestamp, and a trade’s `asset_id` is the snapshot’s `token_id`, so you can put a trade next to the book at that instant and check whether the size you wanted could really have traded at the price you were seeing.
- Snapshot responses now include four fields for judging how fresh a quote was: `event_timestamp` (when the exchange sent it), `capture_timestamp` (when we recorded it), `sequence_number`, and `crypto_price_age_ms` (how stale the reference spot price was at that moment). All four were being stored already — they simply were not being returned.

## Jul 25, 2026 — IPL cricket

- IPL match markets under `category=sports`, with history covering the whole season.

## Jul 19, 2026 — Clearer errors on bad requests

- A request whose parameters cannot be served together now fails straight away and says why, instead of returning a response that quietly ignored half of it. Parameters are also checked before we look the market up, so a mistyped parameter no longer comes back as a misleading "market not found".

## Jul 15, 2026 — Candles instead of raw rows

- Add `interval=` to `/v1/markets/:id/snapshots` and you get open/high/low/close candles instead of individual snapshots. This is the practical way to pull a long stretch of history — a full day of one market can run to hundreds of thousands of rows, and candles turn that into something you can request once.

## Jul 14, 2026 — Commodities, forex and acquisitions

- Three more families of market under `category=equities`, alongside the indices, stock prices, IPOs and private company valuations already there.

## Jul 7, 2026 — Hyperliquid perpetuals

- `GET /v1/exchange/orderbook` and `/v1/exchange/snapshots` give you the order book for the Hyperliquid perpetual on every coin we track prediction markets for. That means you can line a prediction market up against the underlying futures market at the same instant — which is the comparison most crypto strategies are built on.

## Jul 7, 2026 — Sorting, and fuller market records

- `order=` on the snapshots endpoint used to return nothing at all, whatever value you passed. It now accepts `asc`, `desc`, `oldest` and `newest`. The default is still newest first, so the first page you get is the end of the market rather than its beginning — worth knowing if you are paging to find how a market opened.
- Market responses now carry `category`, `subcategory` and `label`, so you can read a set of results without a second lookup just to find out what each one is.

## Jul 2, 2026 — Weather markets

- A weather category covering daily city temperatures, hurricanes and global climate markets.

## Jun 16, 2026 — Teams and prepaid credits

- Enterprise subscribers can invite teammates by email. Members get the full Enterprise limits and draw from the same credit balance as the account owner, so there is no separate billing to manage per seat.
- Prepaid credit packs, on top of your monthly allowance, payable by card or crypto.

## May 29, 2026 — One-click connection for Claude

- The hosted MCP server supports OAuth, so you can add it to Claude as a connector by signing in — no creating an API key and pasting it in.
