How Arena compares prices across venues
How Arena compares prices across venues
How Arena compares the same bet across Kalshi, Novig, Polymarket and ProphetX, when a paper trade takes another venue’s price, and how the volume shown on a game adds the venues up. It describes what the code does today.
What this page covers
Arena lists each bet once, as an instrument with a permanent id (/docs/instruments), and Kalshi’s market is the reference for each one. Where Novig, Polymarket or ProphetX lists the same bet, Arena reads that venue’s price too, shows it next to Kalshi’s, works out the gap between them, and can let a paper trade take that price.
Everything on this page is the sandbox: paper trades are not sent to Kalshi, Novig, Polymarket or ProphetX. Every price Arena compares across venues names the venue it came from and when it was current.
How instruments are matched
By rules, never by price. Kalshi’s listings create every game and instrument, and another venue’s market can only attach to one that already exists. A Novig or Polymarket market attaches when all of these match:
- the game, on Novig: the same two teams, home and away the same way round, starting within a set window of Kalshi’s current start time (48 hours in the NFL, less where teams meet on consecutive days);
- the game, on Polymarket: the Polymarket event is already linked to Kalshi’s event for the same game, and where its outcomes name teams, they are that game’s two teams, in either order. A Polymarket event matched only by its teams and start time gets a confidence of 0.8, so it is never shown;
- the teams: the venue’s spelling of each team must be one Arena has approved for that team. A new spelling is only proposed, and waits for a person;
- the bet: the same market type (moneyline, spread or total), the full game, and the same line on the half-point grid;
- the side: which of the venue’s outcomes pays when the instrument is YES (polarity, below).
A price never makes or breaks a match. Every Novig and Polymarket match starts as proposed: made by rule, not yet reviewed by a person, who can then approve it. As of September 27, 2026, no match has been reviewed, and the note on each price says so.
Arena shows a match next to Kalshi only when it is exact or differs from Kalshi’s contract in a named case (below), its confidence is at least 0.9, and the venue still lists the market.
Polarity
Each listing carries a polarity. 1 means holding that venue side pays when the instrument is YES, and -1 means it pays when the instrument is NO. Arena turns every price into the chance of the instrument’s YES before it shows it, so the venues line up.
- Novig lists an NFL moneyline as one market with two outcomes. Each outcome attaches with 1 to its own team’s instrument, the way Kalshi lists one market per team.
- A spread is stored as “subject wins by more than L”. A Novig spread with Miami at +3.5 at home attaches to
KC -3.5: its KC outcome with 1, its MIA outcome with -1. - A total attaches Over with 1 and Under with -1.
- Polymarket lists a soccer result as a Yes or No market on one outcome, such as the draw: Yes attaches with 1 and No with -1.
So a -1 listing’s price for its own side is 1 minus the instrument’s YES. On Novig, the ask on one outcome is 1 minus the best bid on the other outcome, which holds only when the market has exactly two outcomes. A three-outcome soccer market has no outcome that pays on “this club does not win”, so Arena never prices a NO side from one.
Fungibility: is it the same contract?
Each match records how far the venue’s contract settles the way Kalshi’s does.
- exact
- The two contracts settle the same way in every case, ties, postponements and voids included. Stored as
identicaland answered asexact. Kalshi’s own listings are exact. No Novig or Polymarket match is exact today. - condition_scope
- The same bet, but one named case settles differently, and the note says which. A Novig NFL moneyline voids on a tie and Novig settles the void by its own rule, where Kalshi pays 50. A Novig spread or total differs only if the game is not completed. A Polymarket soccer market differs only if the game is postponed or cancelled. Polymarket’s NFL terms are not yet compared. Shown next to Kalshi with its note, and can take a paper fill.
- non_fungible
- Not the same bet. A Novig spread or total on a whole number, such as 3: a result exactly on the line voids on Novig, where Kalshi’s yes or no market resolves no. Arena keeps it on an instrument of its own, never shows it next to Kalshi and never fills a paper trade at its price.
| Fungibility | Meaning, with examples |
|---|---|
| exact | The two contracts settle the same way in every case, ties, postponements and voids included. Stored as identical and answered as exact. Kalshi’s own listings are exact. No Novig or Polymarket match is exact today. |
| condition_scope | The same bet, but one named case settles differently, and the note says which. A Novig NFL moneyline voids on a tie and Novig settles the void by its own rule, where Kalshi pays 50. A Novig spread or total differs only if the game is not completed. A Polymarket soccer market differs only if the game is postponed or cancelled. Polymarket’s NFL terms are not yet compared. Shown next to Kalshi with its note, and can take a paper fill. |
| non_fungible | Not the same bet. A Novig spread or total on a whole number, such as 3: a result exactly on the line voids on Novig, where Kalshi’s yes or no market resolves no. Arena keeps it on an instrument of its own, never shows it next to Kalshi and never fills a paper trade at its price. |
Every Novig and Polymarket match today is condition_scope.
Coverage by league
What Arena lists and compares as of September 27, 2026. Every league is full-game moneylines, spreads and totals on half-point lines, added as Kalshi lists them, so a league out of season or a game far out can list few or none.
- NFL
- Kalshi, Novig and Polymarket.
- College football (FBS)
- Kalshi and Novig.
- MLB
- Kalshi and Novig. Polymarket stays off until a fault that paired some of its markets with the wrong game in a series is fixed.
- NHL
- Kalshi and Novig. Novig’s NHL moneylines and totals are shown with a note, but never take a paper fill until Arena has read Novig’s overtime and shootout terms.
- NBA
- Kalshi moneylines so far. No other venue is matched yet.
- Premier League
- Kalshi’s three moneylines per game (each club, and the draw), Novig and Polymarket.
- Champions League
- Set up. Instruments come once Kalshi lists the games.
| League | Venues compared |
|---|---|
| NFL | Kalshi, Novig and Polymarket. |
| College football (FBS) | Kalshi and Novig. |
| MLB | Kalshi and Novig. Polymarket stays off until a fault that paired some of its markets with the wrong game in a series is fixed. |
| NHL | Kalshi and Novig. Novig’s NHL moneylines and totals are shown with a note, but never take a paper fill until Arena has read Novig’s overtime and shootout terms. |
| NBA | Kalshi moneylines so far. No other venue is matched yet. |
| Premier League | Kalshi’s three moneylines per game (each club, and the draw), Novig and Polymarket. |
| Champions League | Set up. Instruments come once Kalshi lists the games. |
One instrument’s comparison (the market page, arena quotes, arena gaps <instrument>) works in every league above. The ranked list of gaps (arena gaps with no argument, find_price_gaps with no ref) covers NFL, college football, MLB, NHL, Premier League, NBA and Champions League games for now.
How each venue’s price is read
- Kalshi
- Its public market data, read by Arena’s server: the YES bid and ask and the contracts at each. Kalshi keeps one book per market, so its NO price is 1 minus its YES bid. The time shown is when Arena read it.
- Novig
- Its order book, which shows bids only, per outcome. The ask on one outcome is 1 minus the best bid on the other. Arena’s proxy holds each book over Novig’s live feed while that feed is connected, so a quiet market still reads as fresh, and polls Novig’s public book otherwise, paced for all of Arena and markets someone is viewing first, so a market nobody has viewed in the last minute can take a few seconds to show. A polled book can be up to 5 seconds old at Novig’s own cache, and Arena subtracts that age from the time it shows. The time shown is when the book was last current at Novig. A best-price fill reads its own. A Novig contract pays 1 cent, so 100 of them count as one $1 contract.
- Polymarket
- The public order book of its international exchange: bids and asks per outcome, in $1 shares, and the market’s smallest order. The book’s own time is its last change, so the time shown is when Arena read it.
- ProphetX
- The price ProphetX shows for each outcome of a line and the dollars resting at it, read by Arena’s proxy from ProphetX’s sandbox exchange (see ProphetX, below) over its live feed while that feed is connected, and by polling otherwise. ProphetX quotes American odds, and Arena shows only the chance they imply.
| Venue | What Arena reads, and how old it can be |
|---|---|
| Kalshi | Its public market data, read by Arena’s server: the YES bid and ask and the contracts at each. Kalshi keeps one book per market, so its NO price is 1 minus its YES bid. The time shown is when Arena read it. |
| Novig | Its order book, which shows bids only, per outcome. The ask on one outcome is 1 minus the best bid on the other. Arena’s proxy holds each book over Novig’s live feed while that feed is connected, so a quiet market still reads as fresh, and polls Novig’s public book otherwise, paced for all of Arena and markets someone is viewing first, so a market nobody has viewed in the last minute can take a few seconds to show. A polled book can be up to 5 seconds old at Novig’s own cache, and Arena subtracts that age from the time it shows. The time shown is when the book was last current at Novig. A best-price fill reads its own. A Novig contract pays 1 cent, so 100 of them count as one $1 contract. |
| Polymarket | The public order book of its international exchange: bids and asks per outcome, in $1 shares, and the market’s smallest order. The book’s own time is its last change, so the time shown is when Arena read it. |
| ProphetX | The price ProphetX shows for each outcome of a line and the dollars resting at it, read by Arena’s proxy from ProphetX’s sandbox exchange (see ProphetX, below) over its live feed while that feed is connected, and by polling otherwise. ProphetX quotes American odds, and Arena shows only the chance they imply. |
Every price becomes the chance of the instrument’s YES. YES costs the venue’s YES ask, and NO costs 1 minus its YES bid.
A price at most 15 seconds old is fresh. An older price is out of date: it is shown, with nothing about its age, up to 60 seconds, then hidden, and its tile says Out of date. Arena’s quotes (arena quotes, the quotes API) carry a Novig price up to 5 minutes old, with its time. Any price shown can be marked Lowest, but only a fresh one can take a paper fill. An answer is at most about 10 seconds behind its sources, and the market page asks again every 15 seconds. A fresh Novig price the proxy holds over Novig’s live feed, while that feed is connected, says Live on its tile; when the feed drops, the next answer shows it like any other price. A book that stopped updating reads as fresh over the feed too, so Arena goes by when Novig itself last updated it once the proxy says: before a game, a Novig price Novig has not updated for 5 minutes is left out as out of date (a quiet book Novig updated more recently still shows); during a game, Novig shows only when Novig updated it in the last minute, and is left out when Arena cannot confirm when that was. ProphetX is left out once the game has started. A price left out is never marked Lowest and is no part of a gap or the ranking; on the website, one left out as out of date keeps its tile, which says Out of date and shows no price.
A venue that fails to answer, limits requests or has no orders is left out with a note that says why. It never holds up the other venues.
ProphetX
ProphetX is the fourth venue Arena compares, added October 7, 2026. ProphetX prices come from its sandbox exchange until Arena’s production access is approved. A sandbox price is not a price on ProphetX’s production exchange, and anyone with a sandbox account can post one. So in the comparison a ProphetX price is a labelled row only: it is never marked Lowest, it is no part of a gap figure, and it does not move the order of the compare page or /api/gaps. Every pair with a ProphetX price carries the reason sandbox_prices, is never labelled arbitrage, never ranks as a pair under $1, and is listed after every pair without one. Every place Arena shows a ProphetX price says where it comes from.
ProphetX quotes each outcome as American odds. Arena never shows the odds. It shows the chance they imply, which is the price of a $1 contract on that outcome: odds of -210 imply 210 / (210 + 100) = 67.7%, and odds of +300 imply 100 / (300 + 100) = 25%.
Each ProphetX outcome is its own book that can only be bought. The price shown for an outcome is what a buyer pays for it now, so it is the instrument’s YES ask when that outcome is the instrument’s YES. The YES bid is 1 minus the price of the other outcome, which holds only on a line with exactly two outcomes. Sizes arrive in dollars and are shown in $1 contracts. In ProphetX’s sandbox those dollars are what a buyer wins by matching them, which makes the count the dollars divided by 1 minus the price. ProphetX’s documentation does not say so outright, so until ProphetX confirms it Arena shows the smaller of the two readings: the dollars divided by the larger of the price and 1 minus the price. Under 50% that is the dollars divided by 1 minus the price. Over 50% it is the dollars divided by the price, which can understate what is there and never overstates it. Arena’s paper fills count ProphetX’s size the same way.
ProphetX’s full-game moneylines, spreads and totals attach to an instrument by the same kind of rule as the other venues (the game, the teams, the market type, the line and the side). Every match starts as proposed: made by rule, not yet reviewed by a person.
- Before the game only: ProphetX clears its book at the start of the game, so a paper trade can take ProphetX’s price only before the game starts.
- A tie: ProphetX returns the stake, where Kalshi pays 50. A trade filled at ProphetX’s price settles the way the Kalshi market settles, like every other paper trade.
- Fees: Arena has not read ProphetX’s taker fee schedule, so it counts no ProphetX fee and says the fee is not read.
- Volume: ProphetX is not part of the “$X volume” figure.
- Orders: every ProphetX order is switched off, and a paper fill at ProphetX’s price is a Sandbox fill, recorded in Arena’s own records and not sent to ProphetX. A member can connect a ProphetX account in Settings, and that is all it does today.
Fee assumptions
Paper trades pay no fee. The eval board’s grades subtract the fee Kalshi would charge. Fees matter when comparing venues, because a real trader would pay them. Arena works out each venue’s taker fee from its published schedule, for buying at the displayed price:
- Kalshi
- 0.07 × M × contracts × P × (1 - P), rounded up to the next cent. M is the series multiplier Kalshi publishes: 1 on most sports series, and 0.5 on MLB games, spreads and totals when Arena read them.
- Novig
- 0.03 × P × (1 - P) per $1 contract on game lines, once the game is live, and nothing before it. Arena treats a game as live from 5 minutes before its start. Rounded half up to $0.00001. From Novig’s published schedule, not read market by market.
- Polymarket
- rate × shares × p × (1 - p), rounded up to $0.00001. The rate is read for each market from Polymarket’s market settings: 0.05 on sports markets with fees on, 0 on markets with fees off.
- ProphetX
- Not read yet. Arena counts no ProphetX fee and says so on the pair, and a pair with ProphetX is never labelled arbitrage.
| Venue | Taker fee for one order |
|---|---|
| Kalshi | 0.07 × M × contracts × P × (1 - P), rounded up to the next cent. M is the series multiplier Kalshi publishes: 1 on most sports series, and 0.5 on MLB games, spreads and totals when Arena read them. |
| Novig | 0.03 × P × (1 - P) per $1 contract on game lines, once the game is live, and nothing before it. Arena treats a game as live from 5 minutes before its start. Rounded half up to $0.00001. From Novig’s published schedule, not read market by market. |
| Polymarket | rate × shares × p × (1 - p), rounded up to $0.00001. The rate is read for each market from Polymarket’s market settings: 0.05 on sports markets with fees on, 0 on markets with fees off. |
| ProphetX | Not read yet. Arena counts no ProphetX fee and says so on the pair, and a pair with ProphetX is never labelled arbitrage. |
P is the price of the side bought, from 0 to 1. Arena counts taker fees only, with no maker fees or rebates. A venue can charge differently from Arena’s reading.
If a market’s setting cannot be read, Arena uses that venue’s highest published rate, and the pair is never labelled arbitrage.
Price gaps
For each side of an instrument, the gap is how far apart the venues’ prices are, in points: the highest price shown minus the lowest. One point is one cent on a $1 contract. The HTTP API’s gaps answer carries the larger of the two sides’ gaps (gap_points). The price comparisons on the market page, /compare and /ticker print no gap: they mark each side’s lowest price “Lowest” (“Tied lowest” on a tie) instead.
A gap compares displayed prices before fees. It does not mean a trade would make money.
The arbitrage label, after fees
A pair buys YES on one venue and NO on another. Exactly one of the two pays $1, so the pair is worth buying only if both cost less than $1 per contract after both venues’ taker fees for the size.
Arena labels a pair arbitrage only when all of these hold, after both venues’ taker fees:
- the pair costs less than $1 per contract, fees included, for the size shown;
- both contracts are exact matches of Kalshi’s, so they settle the same way;
- a person has reviewed both matches;
- both prices are at most 15 seconds old;
- both venues show a size of at least 1 contract, and at least the venue’s smallest order, which Polymarket sets for each market;
- both venues are ones a person in the US can use, unless you ask for every venue (below);
- neither fee is a stand-in: each comes from the venue’s setting for this market or, for Novig, its published game-line schedule;
- neither price is more than 10 points from Kalshi’s midpoint, and Kalshi shows one.
Any other pair is a price gap, not arbitrage, and lists every reason word for word. A pair whose contracts differ says “Not risk-free: rules differ.” and names the case. A label lapses as soon as either price is more than 15 seconds old.
A label says what Arena saw, for the size shown, at that moment. It is not risk-free: prices move, an order can fill at a worse price or not at all, a venue can charge a different fee, and a venue may not accept you.
As of September 27, 2026, every Novig and Polymarket match is condition_scope and none has been reviewed, so every pair shown is a price gap and is not labelled arbitrage.
A worked example
The arithmetic for one pair, with made-up prices on an NFL moneyline, not a real market:
KC ML, the game under way, 100 contracts. Made-up prices.
Kalshi YES bid 0.55 YES ask 0.57 NO costs 1 - 0.55 = 0.45
Novig YES bid 0.50 YES ask 0.52 NO costs 1 - 0.50 = 0.50
Gap on YES 0.57 - 0.52 = 5 points, lowest on Novig
Gap on NO 0.50 - 0.45 = 5 points, lowest on Kalshi
Pair YES on Novig at 0.52 and NO on Kalshi at 0.45
Prices 100 x (0.52 + 0.45) $97.00
Kalshi fee 0.07 x 100 x 0.45 x 0.55 = 1.7325, rounded up $1.74
Novig fee 0.03 x 100 x 0.52 x 0.48, the game is live $0.7488
Cost for 100 pairs, which pay $100 $99.4888
Edge $100 - $99.4888 $0.5112, 0.51 points
Other pair YES on Kalshi at 0.57 and NO on Novig at 0.50 = 1.07 before fees, no edgeBefore the game starts Novig charges no fee on game lines, so the same pair would cost $98.74 for 100 and the edge would be 1.26 points.
The label is a price gap, not arbitrage: a Novig NFL moneyline voids on a tie where Kalshi pays 50 (“Not risk-free: rules differ.”), and no person has reviewed the match. If both contracts were exact, both matches reviewed, both prices under 15 seconds old, both venues showing at least 100 contracts and both fees known, the same pair would carry the arbitrage label after fees: $0.51 on 100 pairs, as Arena saw it at that moment.
The same prices before the game, for a buy of YES that asks for a best-price fill: Novig’s ask of 0.52 is fresh, 4 points from Kalshi’s midpoint of 0.56, and below Kalshi’s ask of 0.57, but it is below Kalshi’s bid of 0.55. A price across Kalshi’s bid usually means one book is stale, so the best-price check refuses it and the paper trade fills at Kalshi’s 57%, with that reason recorded. Had Novig’s ask been 0.56, inside Kalshi’s spread and 1 point below its ask, the trade would fill on Novig at 56% if Novig showed the contracts asked for. If the game then tied, that trade would settle at 50, as a trade filled on Kalshi does.
Who can use each venue
- Kalshi
- Open to US users, but it does not offer its sports contracts in every state.
- Novig
- A US exchange that checks each user’s location and is not open in every state.
- Polymarket
- The prices Arena reads come from Polymarket’s international exchange, which does not accept US persons. Polymarket’s US exchange is a separate market that Arena does not read.
- ProphetX
- Nobody, for now: ProphetX prices come from its sandbox exchange until Arena’s production access is approved.
| Venue | Who can trade the prices Arena shows |
|---|---|
| Kalshi | Open to US users, but it does not offer its sports contracts in every state. |
| Novig | A US exchange that checks each user’s location and is not open in every state. |
| Polymarket | The prices Arena reads come from Polymarket’s international exchange, which does not accept US persons. Polymarket’s US exchange is a separate market that Arena does not read. |
| ProphetX | Nobody, for now: ProphetX prices come from its sandbox exchange until Arena’s production access is approved. |
So by default only Kalshi and Novig can pair for the arbitrage label after fees. A pair with Polymarket is listed either way, with the reason it is not arbitrage. A pair with ProphetX is listed with its reasons too and is never labelled arbitrage, whatever is asked for. --all-venues in the CLI and us_only=false on the MCP server let such a pair take the label too, and it still carries Polymarket’s note. Arena does not check where you are.
Best-price fills do not check either. A paper fill can take Polymarket’s price even though a person in the US could not trade there, and the receipt names the venue.
Best-price paper fills
A paper trade that asks for it can fill at Novig’s, Polymarket’s or ProphetX’s price instead of Kalshi’s. The venue’s match must meet Arena’s rule for showing a match next to Kalshi, its price at most 15 seconds old, within 5 points of Kalshi’s midpoint and at least 1 point below Kalshi’s ask, with the contracts asked for shown at that price, before the game starts. A price at or below Kalshi’s bid is refused as a likely stale quote. Otherwise the trade fills at Kalshi’s price, with the reason recorded. Best-price fills are for Arena Basic members. The full rule, sells and limit orders included, is on /docs/execution.
The best-price checks differ from the ones for pairs above on purpose. A paper fill charges no fee, so they compare prices without fees. It accepts a match that differs in a named case, because the trade still settles exactly as the Kalshi market settles and its receipt names the difference (below). And its band around Kalshi’s midpoint is 5 points where the pair rule’s is 10, because a paper fill should take a price close to one a trader could get.
- Website: the order ticket’s “Best price”, the default, or “Kalshi only”. Best price shows a Review step, with where the trade would fill and why, before Confirm.
- CLI 0.5.0:
--venue best, the default, or--venue kalshionarena buyandarena sell.--dry-runshows the venue first. - MCP server 0.5.0:
route: "best", the default, or"kalshi"onplace_tradeandsell_trade, withdry_run: truefor the preview. - iPhone app: sends no route, so its trades fill at Kalshi’s price until an app update.
- A bot that models Kalshi’s book alone should pass
--venue kalshiorroute: "kalshi".
When a best-price fill’s contract differs
A trade filled on Novig, Polymarket or ProphetX settles from the Kalshi market’s result, exactly as a trade filled on Kalshi does. Every difference Arena knows of today, and what happens:
- Novig NFL moneyline, a tie
- Novig voids the market and settles the void by its own rule, a fair price it sets or a refund, as the market says, where Kalshi pays 50. On Arena a tie settles a trade filled on Novig at 50, as Kalshi does. That is Arena’s rule for a Novig fill, not Novig’s price.
- Other Novig markets, an unfinished game
- Novig voids the market and settles the void by its own rule, a fair price it sets or a refund, as the market says, and Kalshi settles by its own rules. On Arena the trade settles the way the Kalshi market settles.
- Polymarket NFL
- Its tie, postponement and settlement terms are not yet compared with Kalshi’s. The trade settles the way Kalshi settles.
- Polymarket soccer, a postponed or cancelled game
- Polymarket keeps a postponed game open until it is played and settles a cancelled one by its own rule, where Kalshi pays a fair price. The trade settles the way Kalshi settles.
- Novig NHL moneylines and totals
- Novig’s overtime and shootout terms are not read yet, so these never take a paper fill.
| Where contracts differ | What happens to a trade filled there |
|---|---|
| Novig NFL moneyline, a tie | Novig voids the market and settles the void by its own rule, a fair price it sets or a refund, as the market says, where Kalshi pays 50. On Arena a tie settles a trade filled on Novig at 50, as Kalshi does. That is Arena’s rule for a Novig fill, not Novig’s price. |
| Other Novig markets, an unfinished game | Novig voids the market and settles the void by its own rule, a fair price it sets or a refund, as the market says, and Kalshi settles by its own rules. On Arena the trade settles the way the Kalshi market settles. |
| Polymarket NFL | Its tie, postponement and settlement terms are not yet compared with Kalshi’s. The trade settles the way Kalshi settles. |
| Polymarket soccer, a postponed or cancelled game | Polymarket keeps a postponed game open until it is played and settles a cancelled one by its own rule, where Kalshi pays a fair price. The trade settles the way Kalshi settles. |
| Novig NHL moneylines and totals | Novig’s overtime and shootout terms are not read yet, so these never take a paper fill. |
The receipt’s rule note (ruleNote in the CLI, rule_note on the MCP server) states the rule for that fill, and selling the position says it again.
Volume
The “$X volume” on a game or an event is the value of the contracts traded there, each contract counted at its $1 payout (notional), the way Kalshi, Polymarket and Novig each report their own volume. It is not the cash that changed hands, which is roughly half of it.
For a game, the figure adds up the full-game moneyline, spread and total markets Arena matches to that game on each venue (Coverage by league, above), and counts each venue market once. Props, halves and quarters are not included, and a venue market matched to two games counts toward neither. Any other event shows its Kalshi volume alone. The tooltip on the figure names the venues included, and so does a note on the game and market pages and under Trending on the search page.
- Kalshi
- Each market’s lifetime contracts traded times its notional value per contract ($1), from Kalshi’s public market data.
- Polymarket
- Each market’s lifetime volume from Polymarket’s public Gamma API, which counts shares traded at $1 each, counted once per market, not once per outcome.
- Novig
- Each market’s contracts traded ($1 each) from the daily market files Novig publishes, summed over every day. A day’s file arrives the next morning, so Novig runs through the last day it has published, and a game still trading shows it through the day before, with “Novig through” that day in the tooltip.
| Venue | What Arena counts |
|---|---|
| Kalshi | Each market’s lifetime contracts traded times its notional value per contract ($1), from Kalshi’s public market data. |
| Polymarket | Each market’s lifetime volume from Polymarket’s public Gamma API, which counts shares traded at $1 each, counted once per market, not once per outcome. |
| Novig | Each market’s contracts traded ($1 each) from the daily market files Novig publishes, summed over every day. A day’s file arrives the next morning, so Novig runs through the last day it has published, and a game still trading shows it through the day before, with “Novig through” that day in the tooltip. |
For a game, the Kalshi part is read about every 5 minutes from two days before the start until 12 hours after it, and about hourly otherwise. The Polymarket part is read about every 10 minutes while its markets are open, and once more after they close. Near game time the figure can be up to about 20 minutes old.
Arena shows the combined figure only, not each venue’s share of it. Polymarket and Novig are included only while Arena shows other venues’ prices, and Arena can leave them out at any time. The figure is then Kalshi’s alone, and the tooltip says so. Where Arena has no figure for an event, the page shows no volume, never a contract count in its place.
Reading the prices without a key
The website’s own routes answer without a key or a sign-in: the same answers a visitor’s browser gets, for looking at, not a feed to resell. arena quotes, arena gaps, the MCP tools get_cross_venue_quotes and find_price_gaps and the Python SDK read them. The keyed API serves no venue price until venue data is switched on for it.
GET /api/quotes/{instrumentId}: one instrument.venueslists each venue that prices it, withyes_bid,yes_askandyes_midas fractions of 1 for the instrument’s YES (0.57 is 57%),last_trade, itsside_labelin words andas_of;omittednames a venue with a listing that could not be priced this time, with a note;cross_venue: falsemeans only Kalshi is shown. 404 for an unknown id.GET /api/quotes/batch?ids=a,b,c: up to 20 instruments in one call.quotesholds one answer per known id, in the shape above, andnot_foundthe ids that are malformed, unknown or not public. It answers 404 only when none of the ids is known. More than 20 ids, a secondidsor any other query parameter is a 400.GET /api/quotes/{instrumentId}/book(view=1from a page): the combined order book. Every venue’s book for the instrument merged into one ladder in its YES terms,yes.bidsandyes.asks, and the same ladder seen from NO, each level with itsprice,sizeandcumulativein contracts that pay $1 (null where a venue does not say its size) and the venues at it. Equal prices merge and nearby ones never do. A venue whose contract differs on some outcome (condition_scope) is listed at its level with its note and not summed; a price more than 15 s old is left out, invenues_left_out, and so is ProphetX, whose prices come from its sandbox exchange and never decide the top of the book. Kalshi’s and Polymarket’s books come from Arena’s proxy (8 and 20 levels a side), Kalshi’s in whole cents: on a Kalshi market priced finer than a cent, Kalshi adds its top of book only. Novig adds its top of book only (venue_depth). The answer carries the one-instrument quotes answer too (quotes), so one read serves both, from the same budget. While Arena shows Kalshi only, the book is Kalshi’s alone.GET /api/gaps(league,min_gap,limit,size,us_only) ranks price gaps across live instruments, NFL, college football, MLB, NHL, Premier League, NBA and Champions League games for now (every live game of a league in the next 8 days; with nothing to show,notessays why when it can), andGET /api/gaps/{instrumentId}(size,us_only) lists every pair for one instrument, labelled arbitrage only under the rule above, after both venues’ fees.- Each IP has a request budget, shared by the one-instrument quotes and gaps reads; past it the answer is 429 with
Retry-After. Answers are cached for a few seconds, and every price keeps its own time (as_of), so work out ages from that.
What Arena does not do
- It does not send paper trades to Kalshi, Novig or Polymarket: every fill on this page is a paper fill in Arena’s own records. A live order is separate: it is sent only with your own venue credentials, as real money at the venue under the venue’s rules and terms, and Arena is not a broker and never holds your funds (/docs/execution#live-orders).
- None of them reviews Arena’s matches or prices.
- It charges no fee on paper fills and does not walk the book, so a paper fill can be better than a real order of that size would get.
- It does not promise a price. A price shown, a gap and a paper fill are what a venue showed Arena at one moment.
- It does not read Polymarket’s US exchange, and it does not check which venues you can use.
- It is not a data feed. There is no download of other venues’ prices.
- “Lowest” and “Best price” name the lowest price that passed Arena’s checks at that moment. They say nothing about a venue in general.