How-to · 3 steps

How to read prediction markets
with Monid.

Give this to your agent
$set up https://monid.ai/SKILL.md, then show me this question on both venues and the cost of each step

and let it take it from there.

›price this question on both venues
#JobWhat came backCost
1Match the question20 pairs, confidence 100
2Venue oneYes at 0.001
3Venue twoYes at 0.005, a 5x gap
4The timestamps156.9 days apart, here
5So the gap isnot a disagreement
6The active flagtrue on all 20 rows
7The other venuesays 16 are finalized
8Default windowempty, billed, twice
9The order bookempty on a live ticker
10Total8 runs, 3 returned nothing
one question · two venues · a price gap that was a date gapagent running$0.1920

Real run, 2026-09-25. Public market data, timestamps as returned.

Step 1

Set up Monid.

One line. It installs the CLI and asks for an API key from app.monid.ai. New accounts start with $1.00.

Say this to your agent
>set up https://monid.ai/SKILL.md
Step 2

Pick what you need. Say it in one sentence.

Click a job. Paste the sentence, fill in the brackets.

The same question on two venues

Say this to your agent
>get the matched prediction market pairs with surf on monid, passing active_only true so the endpoint does the open-on-both filter server-side rather than you doing it by hand. if you want a particular question rather than a browse, the search endpoint takes a q keyword over the question text and the ticker
What the agent runsdone
surf /prediction-market/matching/pairs$0.024
surf /prediction-market/matching/daily · not run$0.024
surf /search/prediction-market$0.024
surf /prediction-market/correlations$0.024
What came backone matched question · 2026-09-25
Do the two venues agree the market is openof 20 matched pairs
one venue says active20 of 20
the other says finalized16 of 20
genuinely open on both4 of 20
what arrivestwenty cross-venue pairs, every one at confidence 100 and match type exact, across culture, sports, politics and economics, each carrying both venues' identifiers
the flag that is never falseone venue reported its market active on all twenty rows while the other reported sixteen of them finalized, on both runs, so that one flag on its own keeps everything
and the venue name changes casethe source field comes back capitalised while every request enum is lowercase, so a naive equality filter matches nothing
the volumes are different unitsone side reports dollars and the other reports contracts, in the same position of the same object; dividing one by the other means nothing
there IS a keyword search, and this page said there was notthe search endpoint declares a q field described as searching the question text or the ticker, and it works: a plain phrase returned five matching markets
and the status filter is a parameter, not a chorean active-only flag is declared and does the job server-side in the same call, returning twenty rows open on both sides; an earlier version of this page told readers to filter it by hand
the unit trap is documented, not hiddenthe two volume fields are named for their units and the daily endpoint's own summary says so, so this is a field you must read rather than a trap that catches you
$0.02420 pairs, one call

Check the timestamps before the prices

Say this to your agent
>price this matched question on both venues with surf on monid using interval latest, then subtract the two timestamps and tell me how far apart the quotes are before you tell me the prices
What the agent runsdone
surf /prediction-market/kalshi/prices$0.024
surf /prediction-market/polymarket/prices$0.024
surf /prediction-market/polymarket/price-ohlc · not run$0.024
What came backone matched question · 2026-09-25
Two quotes, both returned as latestdays between the two quotes
this pair, the gap156.9 days
a second pair, same group37.5 days
what it looks likeone venue quotes Yes at 0.001 and the other at 0.005, which reads as a 5x disagreement between two markets on one question
what it isthe two quotes are 156.9 days apart, both returned under interval latest and neither marked stale. A second question in the same event group came out 37.5 days apart and 1.25x, so the gap is a property of the pair rather than of the venues: measure it on yours
and quote the gap, not the agesthe two timestamps are fixed, so the ages grow by a day every day while the gap between them does not move
the only tellsubtracting the timestamps. Nothing else in either response distinguishes a current quote from a five-month-old one
the quotes are fineboth sides sum to exactly 1.000 on both venues, so each is internally coherent; they are simply not contemporaneous, and comparing them is the error
$0.048two quotes, one question

How the two venues compare overall

Say this to your agent
>get the prediction market analytics with surf on monid and compare the two venues on the last day where both series have a point. do not take the last row: their series end on different days
What the agent runsdone
surf /prediction-market/analytics$0.024
surf /prediction-market/kalshi/volumes · not run$0.024
surf /prediction-market/polymarket/volumes · not run$0.024
surf /prediction-market/polymarket/open-interest · not run$0.024
What came backone matched question · 2026-09-25
The last day both series coverone venue against the other
daily volume30.2x one way
market count1.87x the other
open interest1.50x the other
the series do not line upone venue's data runs ten to thirteen days further than the other's inside the same array, with nothing marking either as the end of its series, so the naive last row is a zero
and the multiple reverses by categoryplatform-wide the daily volume gap was 30.2x one way; on a single category it ran 2.5x the OTHER way. A platform-wide ratio is not a fact about the question you are pricing
and the other directionthe smaller-volume venue carried more open interest and more markets, which held on both runs, though which venue that is depends on the slice
read the array order tooone analytics array is oldest-first and another in the same aisle is newest-first, and neither says so
so which is biggerdepends entirely on the measure, which is why the page reports all three rather than picking one
$0.02430 days, both venues

The window that returns nothing

Say this to your agent
>when you price a market with surf on monid, pass interval latest explicitly. the default is a thirty-day window, so any market whose last activity falls outside it returns an empty array and bills in full: that is most dormant markets and it is not an error you can see from the status
What the agent runsdone
surf /prediction-market/polymarket/prices$0.024
surf /prediction-market/kalshi/orderbooks$0.024
surf /prediction-market/kalshi/prices$0.024
What came backone matched question · 2026-09-25
Eight billed callsUS dollars
returned rows$0.120
returned nothing$0.072
the window is the problem, not the default as suchthe default is a thirty-day range, so it answers for a market that traded inside it and returns an empty array for one that did not. On a second question it came back empty for a market last active 176 days ago and returned rows for one last active 20 days ago, in the same run
which is why latest is the safe instructionasking for latest removes the window from the question entirely, and on every id that came back empty under the default it returned a row
and the order book tooan order-book call on the exact ticker that had just priced correctly returned no snapshots and a count of zero, billed in full
what that is worth$0.072 of a $0.192 run, which is 37.5% of the spend on responses with nothing in them
none of them erroredall three were 200s, which is why the check has to be on the row count rather than on the status
$0.072what the empties cost

The identifier that changes its name

Say this to your agent
>when you take an identifier from the matching endpoint into a price call, rename it: the matching response calls it market_ticker and the price endpoint expects ticker. a wrong field NAME fails for free, but the right name carrying the other venue's identifier returns an empty 200 and bills in full, so check the value as well as the key
What the agent runsdone
surf /prediction-market/matching/pairs$0.024
surf /prediction-market/kalshi/prices$0.024
surf /search/prediction-market$0.024
What came backone matched question · 2026-09-25
the renamethe matching endpoint hands you market_ticker and the Kalshi price endpoint wants ticker; passing the field you were given fails validation
the workflow the description points at does workthe price endpoint tells you to discover tickers with a q keyword on the search endpoint, the search endpoint declares q, and that route works. An earlier version of this page reported a contradiction here that does not exist
a wrong field NAME costs nothingit is refused before a run exists, so the round trip is the whole price
a wrong field VALUE does notthe right field name carrying an identifier from the other venue returned a 200 with an empty array and billed in full, which is exactly the mistake this sentence is about
$0.00the 422s are free

Before you build a scanner

Say this to your agent
>before you design a scanner, get the analytics momentum summary with surf on monid and tell me what share of active markets carry any classification at all. then price the same scan on the other prediction-market provider on monid: it is roughly two and a half times cheaper per call and covers more venues, so the provider choice decides the budget before the call count does
What the agent runsdone
surf /prediction-market/analytics$0.024
surf /prediction-market/polymarket/smart-money · not run$0.024
surf /prediction-market/polymarket/leaderboard · not run$0.024
surf /market/fear-greed · not run$0.012
What came backone matched question · 2026-09-25
How much of the surface carries a signalof 3,646,753 active markets
neutral3,630,597
confirming, either way13,758
diverging, either way2,398
the share16,156 markets out of 3,646,753 carry any momentum classification, which is 0.44% of the surface; a second run put it at 0.41%, so it is a fraction of one percent rather than a fixed figure
what that means for a scana design that assumes most markets carry a reading is designing for 0.44% of them; the neutral bucket is the answer almost everywhere
there IS a cheaper rung, and this page said there was nota second provider runs a parallel prediction-market aisle at about $0.00935 a call, roughly two and a half times cheaper, and its market search covers five venues against this one's two. This provider's own options and futures endpoints are $0.012 rather than $0.024, so even inside it the price is not flat
what one pair costs to watchthree calls a day is $2.16 for thirty days here and about $0.84 on the cheaper provider, which is the difference a scanner is actually built on
$0.0243.6 million markets classified
Step 3

Take the cheapest route with Monid.

Ordering inside this provider saves little, because its endpoints are near enough the same price. What saves money is pricing the job on the other provider first, and skipping the call that comes back empty.

Match it across venues · $0.024
Matching pairs$0.02420 matched questions
Check both statuses$0.00the flag is always true
Price it · check the other provider first
Kalshi, latest$0.024
Polymarket, latest$0.024
Order book$0.024
Venue analytics$0.024
Subtract the timestamps
How far apart are they$0.00
Same units on both$0.00dollars or contracts
Back to you
rowquoted bycost
1Kalshi, latest$0.048
2already settled$0.024
3Polymarket, latest$0.072
4already settled$0.024
5Kalshi, latest$0.048
5 of 5 rows$0.216
Say this to your agent
>show me these questions on both venues, and tell me how old each quote is before you compare them: <paste questions>
“subtract the timestamps”two quotes both labelled latest were 156.9 days apart, which was the whole of a 5x gap; a second pair was 37.5 days apart, so measure yours
“check both statuses”one venue's active flag was true on all twenty rows while the other had settled sixteen
“pass interval explicitly”the default window returned an empty array on ids the aisle had just supplied, and billed
“never divide the volumes”one venue reports dollars and the other reports contracts, in the same field position
“price the other provider first”a second prediction-market provider is about 2.5x cheaper a call and covers five venues rather than two
“search by keyword”the search endpoint takes a q over the question text, so you do not have to browse a category enum to find one question

One key. 1,700+ tools.

Twenty-four endpoints at $0.024, and a second provider covering more venues for less.

The same question, both venuessurf · $0.024 / call
Both venues' daily totalssurf · $0.024 / call
A market's price historysurf · $0.024 / call
Order books and tradessurf · $0.024 / call
Open interest and volumessurf · $0.024 / call
Browse by categorysurf · $0.024 / call
Fear and greedsurf · $0.012 / call
Heat scores and indicatorssurf · $0.012 to $0.024

+ 1,700 more across 55 providers

Browse the catalog →