vike

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.

cURL
# 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.

Example response
[
  {
    "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.

cURL — each outcome
# 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"
Response — each outcome
[
  {"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.

cURL — World Series
# 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.

cURL — last trade
# 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.

cURL — de-duplicated
# 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.

Ask your agent
What is the best bid and ask on Yes for Kylian Mbappe finishing in the top 3 of the 2026 Ballon d'Or?
Example response
[  {    "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"]  }]