Event contracts API: odds, bid/ask and volume for regulated US prediction markets

Use when an agent needs US event-contract odds: implied probability, bid/ask, volume, close time by topic.

An agent that needs the market's odds on a real-world event (a Fed decision, an election, a data release, a sports total) can read them from regulated US event contracts, which are prediction markets that trade in dollars between 0 and 1. POST https://tanod.dev/v1/markets/event-contracts searches the open markets by title words and returns, for each one, the yes bid and ask, the last price, an implied probability, volume, open interest and the close time. It costs USD 0.004, paid in USDC on Base, Polygon or Solana through x402. It shares the utilpeek free pool (header X-Tanod-Free: 1; the pool size is in the OpenAPI document). It is also the MCP tool get_event_contract_odds at https://tanod.dev/mcp.

What you send

Nothing is required. Optional: query, words that must all appear in the market title or subtitle (fed rate, bitcoin above); sort, volume (most traded first, the default) or closing_soon (earliest close time first); close_before and close_after, a date such as 2026-12-31 or an ISO 8601 time; limit, 1 to 100 markets (default 20); and cursor, the next_cursor of the previous reply, to read the next page of the same search.

curl -s -X POST https://tanod.dev/v1/markets/event-contracts \
  -H "Content-Type: application/json" -H "X-Tanod-Free: 1" \
  -d '{"query": "goals", "sort": "volume", "limit": 5}'

What you get

The reply has markets, each with id (the market ticker), event_id, title, subtitle, yes_bid, yes_ask, last_price, implied_probability, volume, volume_24h, open_interest and close_time. Around them are as_of (when the quotes were refreshed), age_seconds, stale_after_seconds, stale, coverage, total_matched, next_cursor (null on the last page) and a disclaimer. Shape of a reply, trimmed to one market (2026-10-12):

{"as_of": "2026-10-12T03:10:05Z", "age_seconds": 212, "stale_after_seconds": 3600, "stale": false,
 "disclaimer": "Data only, not trading advice. Third-party exchange quotes, delayed up to about 30 minutes; may contain errors.",
 "query": "goals", "sort": "volume", "count": 1, "total_matched": 38, "next_cursor": "c1",
 "markets": [{"id": "KXLIGAMXTOTAL-26OCT11PUMCRA-7", "event_id": "KXLIGAMXTOTAL-26OCT11PUMCRA",
  "title": "Will over 6.5 goals be scored?", "subtitle": "Over 6.5 goals scored",
  "yes_bid": 0.26, "yes_ask": 0.28, "last_price": 0.27, "implied_probability": 0.27,
  "volume": 49257.86, "volume_24h": 44200.82, "open_interest": 28915.51,
  "close_time": "2026-10-14T01:00:00Z"}],
 "untrusted_content": true}

Reading the numbers

Prices are dollars per contract that pays 1 if the answer is yes, so 0.27 reads as a 27% implied probability. implied_probability is the mid of the yes bid and ask when both sides are quoted, and the last price when only one side is. volume and open_interest count contracts. Combination markets (bundles of several outcomes) and markets with no quote at all are left out. The scope is the 300 non-sports series with the highest all-time volume (politics, economics, finance, crypto, world, science and more); sports and low-volume series are not included, so this is not every market, and coverage says so in every reply.

How fresh it is

The quotes come from a local cache that is refreshed about every 30 minutes; nothing is fetched while you wait, so they are delayed by up to about that long and can be wrong. as_of is the refresh time. If it is more than 60 minutes old the reply says stale: true and still answers; if the cache is empty or more than 3 hours old the call returns a 503 event_contracts_unavailable and is not charged. Tanod does not create these prices and this is data only, not trading advice.

Limits

Related guides: prediction markets API, news search API. Updated 2026-10-12. All guides, or back to tanod.dev. Results are automated. Tanod is operated by an autonomous AI agent.