vike

Settlement of one market

The on-chain settlement of one market — which outcome won, the payout vector, and the block and timestamp at which it resolved. For "how did this end", this is the authority.

GET https://data.vike.io/v1/polymarket/settlements/{condition_id}

The on-chain settlement of one market: which outcome won, what the payout vector was, and the block and timestamp at which it resolved. Call it to determine, from chain truth, how a market actually ended.

That is the call behind this page's response — a market that has already resolved on chain, so its payout vector is immutable and this example cannot go stale.

cURL
# how did a market actually end, from chain truth: the winning outcome, the payout vector, and the block and time it resolved
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/settlements/0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13"

# the same market's directory row, to compare its lifecycle flags with this settlement
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/markets/0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13"

# keep the winning token id: winning_index indexes token_ids, and winning_token_id is that entry already resolved
WIN=$(curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/settlements/0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13" | jq -r '.[0].winning_token_id')

# then the winner's own probability candles, daily, to see how the market priced it on the way to 1 (an unrecorded token returns [])
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/ohlcv?token_id=$WIN&interval=1d&limit=60"

# [] is what an id the chain has not resolved gets: a market still trading, a cancelled or voided one,
# or an id that is no condition_id. It is 200, never a 404, and never proof of "open": test the length
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/settlements/0x0000000000000000000000000000000000000000000000000000000000000000" | jq length
condition_idpathrequired
The 0x-prefixed market condition id. As with /markets/{condition_id}, a token_id here returns [].

A real response, fetched from the running service.

Example response
[
  {
    "condition_id": "0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13",
    "market_known": true,
    "outcomes": ["Yes", "No"],
    "payouts": [0, 1],
    "question": "Will Donna Vekic win the 2026 Women’s US Open?",
    "resolved_block": 93138611,
    "resolved_ts_ms": 1788412950000,
    "slug": "will-donna-vekic-win-the-2026-womens-us-open",
    "token_ids": ["100208760979006815700821365554623989048585541964271047036444923380678560443951", "43437917871736289675135437047499696002273396903387531260510673476203211904981"],
    "winning_index": 1,
    "winning_outcome": "No",
    "winning_token_id": "43437917871736289675135437047499696002273396903387531260510673476203211904981"
  }
]

winning_index indexes into outcomes and token_ids; winning_outcome and winning_token_id are those entries resolved for you. payouts is the on-chain payout vector in the same order. A void (equal payouts) has winning_index: -1 and empty winning_outcome and winning_token_id.

The on-chain fields (condition_id, payouts, winning_index, resolved_block, resolved_ts_ms) are always exact. The others come from the market list, and market_known: false means it has no entry for this market: slug, question, winning_outcome and winning_token_id are then "", and outcomes and token_ids are []. A real one:

A settlement with no known market
[
  {
    "condition_id": "0x4609b3cc521098d3c0b5bb2d0f816d2bf53032ee9726b61d19d75797edc8bfd4",
    "market_known": false,
    "outcomes": [],
    "payouts": [0, 1],
    "question": "",
    "resolved_block": 81053560,
    "resolved_ts_ms": 1767226379000,
    "slug": "",
    "token_ids": [],
    "winning_index": 1,
    "winning_outcome": "",
    "winning_token_id": ""
  }
]

This is the on-chain resolution, and [] here means the chain resolved nothing, never "still open": Polymarket data model.

A value in the path that is not 0x and 64 hex digits (a token id, for one) gets its [] with an X-Vike-Note: condition_id is 0x followed by 64 hex digits; this value is not one header. A well-formed id the chain has not resolved gets [] with no header.

There is no bare /settlements and no flat spelling

/v1/polymarket/settlements without a condition id is not a route: it answers 404, and the retired flat /v1/settlements/{condition_id} does the same. The working forms are this one, carrying the condition id, and /settlements/bulk, which returns the same row for many markets, up to 5,000 to a page.

cURL
# how did a market actually end, from chain truth: the winning outcome, the payout vector, and the block and time it resolvedcurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/settlements/0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13"# the same market's directory row, to compare its lifecycle flags with this settlementcurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/markets/0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13"# keep the winning token id: winning_index indexes token_ids, and winning_token_id is that entry already resolvedWIN=$(curl -s -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/settlements/0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13" | jq -r '.[0].winning_token_id')# then the winner's own probability candles, daily, to see how the market priced it on the way to 1 (an unrecorded token returns [])curl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/ohlcv?token_id=$WIN&interval=1d&limit=60"# [] is what an id the chain has not resolved gets: a market still trading, a cancelled or voided one,# or an id that is no condition_id. It is 200, never a 404, and never proof of "open": test the lengthcurl -s -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/settlements/0x0000000000000000000000000000000000000000000000000000000000000000" | jq length
Example response
[  {    "condition_id": "0x69e0442186b71c5cac4fa6304311e39101ed048983a200fc8e376a9dadd7de13",    "market_known": true,    "outcomes": ["Yes", "No"],    "payouts": [0, 1],    "question": "Will Donna Vekic win the 2026 Women’s US Open?",    "resolved_block": 93138611,    "resolved_ts_ms": 1788412950000,    "slug": "will-donna-vekic-win-the-2026-womens-us-open",    "token_ids": ["100208760979006815700821365554623989048585541964271047036444923380678560443951", "43437917871736289675135437047499696002273396903387531260510673476203211904981"],    "winning_index": 1,    "winning_outcome": "No",    "winning_token_id": "43437917871736289675135437047499696002273396903387531260510673476203211904981"  }]