What you’ll get
For a chosen purchase, estimates at your size and a separate assessment of whether the contracts pay the same way. For discovery, the examples below rank graph-equivalent pairs by price gap, liquidity and spread. A graph relationship under ordinary resolution does not by itself establish identical cancellation, void or refund treatment. The historical scan on 2026-09-17 found a widest tradeable gap of 1¢, with nothing surviving the spreads.Prerequisites
- An API key in
ROUTEUR_API_KEY - Python 3 with
requests, or Node 18+
Compare a chosen purchase
UseGET /v1/markets/{venue}/{id}/comparison (purchaseComparison) before
choosing a venue. Supply side=yes or side=no, unit=shares for a fixed share
quantity or unit=usd for a trading budget, and a decimal amount. Set
MARKET_ID to the current Kalshi market you want to compare:
polymarket. An optional counterpart query selects
a venue:market_id from the returned candidates; otherwise the strongest
available graph relation is selected. The API does not create an account or
place an order.
Read the response’s data as follows:
Compare the same share quantity by trading cost, or the same budget by the
number of shares available after fees. Preserve the explicit outcome mapping:
one venue’s Yes can correspond to another venue’s No. Unknown settlement
agreement is not an equivalent-payout claim.
Quotes are estimates, not reserved liquidity. Refresh before order review and
check the account’s funds, eligibility and execution limits separately. A
configured assessment worker is required to turn pending settlement evidence
into a current automated assessment; a successful API response alone does not
prove that coverage is available.
Scan graph-equivalent pairs
1
List the proven-equivalent pairs
GET /v1/cross-venue returns relations between a Kalshi and a Polymarket market, stated from the Kalshi side. relation=equivalent keeps graph-equivalent outcomes; inspect the settlement evidence before treating the contracts as interchangeable.2
Rank the pairs by gap, skipping thin markets
Read both Yes asks, drop any pair where either side is graded Output observed 2026-09-17 12:44 UTC, trimmed to the first four rows:
thin, and rank by the gap. Subtracting both markets’ spread_usd (the Yes ask plus the No ask less $1) shows what is left after crossing each book once.3
Or let the API rank them
GET /v1/insights returns spreads: the equivalent pairs priced furthest apart, already sorted, with net_usd, what a contract of the gap is worth once both spreads and the estimated taker fees are paid. By default only pairs with a positive net_usd above the liquidity floors are listed, so the list is often empty.spreads was []. Adding include_thin=true drops the floors and shows the closest pairs anyway, so you can see why they were left out:Read the result
Pitfalls
- A gap is not a trade. The two asks were observed minutes apart, and the top of book can be one contract deep. Size it against the books with Slippage at size, or read
GET /v1/opportunities?cross_venue=true, which prices the pair with fees and sizes it against live books (depth.executable). - Booleans go as lowercase text.
cross_venue=True, as Python’srequestsencodes abool, is rejected with400 invalid_parameter. Send"true". - Pagination is by
offset, up to 100,000.cross_venuehad 1,301 equivalent pairs on 2026-09-17, so five pages of 200 do not cover everything; raisepagesif you need the tail. - Settlement can differ. Every cross-venue pair’s
evidenceends with how postponement and cancellation settle differently. Equivalent under normal settlement is not equivalent in every world.
Related
- Proof trail: read why a pair is equivalent, and decide whether the lead on it is executable.
- Liquid opportunities: gaps, leads and strategy matches in one ranked scan.
- Cross-venue and Relations: what the relations mean and how they are proven.
GET /v1/relations/{left_venue}/{left_id}/{right_venue}/{right_id}for the proof behind any pair.