Recipe 3 of 30
What is the price of every outcome in a multi-outcome Polymarket event?
List the event's markets with /markets?query=<shared slug words>&active=true, then read the top of book of each market's Yes token with /orderbook?depth=1.
A multi-outcome Polymarket event is a group of Yes/No markets, one per outcome. GET /v1/polymarket/markets lists them in one call, searched by the words their slugs share, and GET /v1/polymarket/orderbook with depth=1 gives the best bid and ask of each market's first token, which is Yes. The mid of the two is the outcome's price, a probability from 0 to 1. The search parameters are on Markets.
Quick answer
Search the words the event's slugs share, and keep the markets still trading.
# the open markets of one event, found by the words their slugs share
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/markets?query=ballon-dor&active=true&limit=100"Example response
Captured from the live API on 2026-10-24 at 17:14 UTC, with limit=5, trimmed to 3 rows: two markets of the event, with neg_risk 1, and a head-to-head market whose slug also matched. Each row's token_ids[0] is its Yes token. The top of book priced the three Yes tokens at 0.94/0.95 (Mbappe top 3, mid 94.5%), 0.07/0.08 (Messi top 3, mid 7.5%) and 0.74/0.81 (the Mbappe-or-Yamal market). The "top 3" markets are not exclusive, so their Yes prices do not add up to 1.
[
{
"active": 1,
"closed": 0,
"condition_id": "0x61c85ceb5eb8c7bac9850da91d05b557d6942b5c4cfa40b37a09ea6c87657fca",
"end_date": 1798779540000,
"neg_risk": 1,
"slug": "will-kylian-mbappe-finish-in-the-top-3-of-the-2026-ballon-dor",
"tick_size": 0.01,
"token_ids": ["74473996442012992380676870006739770237037057336567567233855106290930440805273", "94460938716696962400906318004981079238211572891965687608128793145682575549865"]
},
{
"active": 1,
"closed": 0,
"condition_id": "0x573b157703ef39c682aaa222bc869be0095a4c54609e944e5141f51d4950f29e",
"end_date": 1798779540000,
"neg_risk": 1,
"slug": "will-lionel-messi-finish-in-the-top-3-of-the-2026-ballon-dor",
"tick_size": 0.01,
"token_ids": ["112435591087016076493208960534401323722333105737554100813225815674637878259660", "63086127080680203778253022484510098280938456036714510564823281331392001317244"]
},
{
"active": 1,
"closed": 0,
"condition_id": "0xa3cf5e6b27c672d56f3c883139ae87a2dcef9d16a373decab50621cb793b3af4",
"end_date": 1798779540000,
"neg_risk": 0,
"slug": "ballon-dor-2026-kylian-mbappe-or-lamine-yamal-to-finish-higher",
"tick_size": 0.01,
"token_ids": ["9967084719343625711997142692507938085009784437598207941851607360026314918661", "73877469911164783483727109892671837206592094691504566543649332822985046266712"]
}
]Variations
Then the price of each outcome. Once per market, ask for the best bid and ask of its Yes token. For the first market, captured the same minute, as_of_ts is the snapshot actually used (one to three minutes old across the three markets) and size is in shares.
# once per market: the best bid and ask of its Yes token (token_ids[0])
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/orderbook?token_id=74473996442012992380676870006739770237037057336567567233855106290930440805273&depth=1"[
{"as_of_ts": 1792861929486, "level": 1, "price": 0.95, "side": "ask", "size": 285.59},
{"as_of_ts": 1792861929486, "level": 1, "price": 0.94, "side": "bid", "size": 849.32}
]An event with outcomes already out. active=true drops the outcomes that have closed. For the World Series it returned two markets on
2026-10-24, the Brewers and the Rays.
# the outcomes of an event that are still trading
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/markets?query=world-series&active=true&limit=100"The last traded price instead of the book. The close of the latest hourly bar is the last trade, which can be older than the quote.
# hourly bars of one Yes token since a day ago; the last row's close is the latest traded probability
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/ohlcv?token_id=74473996442012992380676870006739770237037057336567567233855106290930440805273&interval=1h&from=1792775625357"Keep one row per level. The same (side, level) can come back more than once.
# the top of book with repeated rows removed
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/orderbook?token_id=74473996442012992380676870006739770237037057336567567233855106290930440805273&depth=1" | jq 'unique_by([.side, .level])'Before you rely on it
There is no event id, only a slug search
The API has no event id. query is a substring match on the market slug, so it can catch a market from
another event (the mbappe-or-lamine-yamal-to-finish-higher row of the example, with neg_risk 0) and miss an
outcome whose slug is worded differently. Read every slug before you sum or rank prices. The list holds
the markets Vike records, at most 100 rows with no paging, and each price costs one more call. A
quiet book can be old: check as_of_ts before you quote it.
Ask your agent
Connected to the Vike MCP server (https://vike.io/mcp) in Claude, ChatGPT or Cursor, ask it in plain words. The polymarket_orderbook tool answers for one outcome, at 1 credit a call.
What is the best bid and ask on Yes for Kylian Mbappe finishing in the top 3 of the 2026 Ballon d'Or?