VoxOdds

App · 15 actions

Live prediction-market odds from Polymarket and Kalshi. Search markets and follow their price history, ask a question in plain English and get the odds, check a bookmaker's price for value, quote what an amount really buys once fees and order-book depth are counted, and see which venue is cheaper for the same outcome. Also VoxOdds' research signals, strategy backtests, research notes and an audited scoreboard of AI forecasts against the market. No account or API key required.

Actions

ActionWhat it does
Ask a questionAsk in plain English, such as 'Will Bitcoin dip to $77,500 in October?', and get the odds from the one market that answers it.
Check a betCheck a bookmaker's price before you bet: VoxOdds finds the prediction market for the event and compares the odds you were offered with the market's probability, giving the expected value per $100, the break-even odds and a verdict.
Compare Polymarket and KalshiQuote the same bet on Polymarket and on Kalshi, fees and order-book depth included, and see which is cheaper and by how much.
Find the best pricesRank every outcome that trades on both Polymarket and Kalshi by where it is cheaper to buy right now, with fees and order-book depth counted for the amount you choose.
Get a marketGet one prediction market with its current odds and its hourly price history over the last days, ready to chart or to check how far the odds have moved.
Get a market summaryGet a short, ready-to-paste summary of one market in Markdown: the question, the odds, the money traded and links to trade it.
Get a price quoteFind out what a dollar amount really buys on one Polymarket or Kalshi market right now: VoxOdds walks the live order book and counts the fees, so you get the true average price, the shares, the payout if you win and whether the book is deep enough.
Get a research noteGet one VoxOdds research note in full: the thesis, the checks it is waiting on, the price levels to reassess at, its sources and the rules for sizing a position.
Get the forecast scoreboardSee how AI forecasts have scored against prediction-market prices on questions that have since resolved: accuracy and Brier score for each model, how often each beat the market, and the most recent scored forecasts.
Get the strategy playbookGet VoxOdds' current playbook: which simple trading tactics its backtests say are working, which to avoid, the live markets that fit them now and the guardrails to follow.
List edge signalsList VoxOdds' ranked research signals: markets where the price is moving fast, looks mispriced or is close to settling, each with a score, a risk level, what to check and what would make it wrong.
List research notesList VoxOdds' public research notes: the markets it is watching, the side it is researching and why, what would prove it wrong and where the price stands now.
List trending marketsThe 20 prediction markets with the most money traded in the last 24 hours, with their live odds: a quick read on what people are betting on right now.
Run a backtestTest simple tactics (follow a fast move, fade a fast move, fade extreme prices) against VoxOdds' stored hourly prices and see how often each would have won.
Search marketsFind prediction markets by keyword and category, with live odds from Polymarket: each outcome's price and probability, the money traded, when it closes, and VoxOdds' grade for how cleanly it could be traded.

Ask a question

Ask in plain English, such as 'Will Bitcoin dip to $77,500 in October?', and get the odds from the one market that answers it. VoxOdds will not guess: when several markets fit about equally well it returns them as candidates instead, so check 'matched' before using the odds. No API key required.

Inputs

QuestionquestiontextRequired
The question, in plain English. Name the person, event and year: a specific question matches a single market more often.

Outputs

analysis_urltext
The matched market on VoxOdds.
answertext
VoxOdds' answer in a sentence.
candidateslist
The markets that fitted when none won outright: pass one's ID to Get a market.
market_idtext
The matched market's ID. Null when not matched.
match_statustext
matched, ambiguous or low_confidence.
matchedtrue/false
True when VoxOdds settled on exactly one market. False means 'outcomes' is empty and 'candidates' lists the markets that fitted.
outcomeslist
Each outcome's probability. Empty when not matched.
platformtext
Where it trades: polymarket or kalshi.
questiontext
The matched market's question. Null when not matched.
reasontext
Why no single market was chosen. Null when matched.
search_urltext
A VoxOdds search for the question when nothing matched.
trade_urltext
A link to trade it. Null when not matched.
Example output
{
  "analysis_url": "https://voxodds.com/market/898415",
  "answer": "According to prediction markets, the current odds are: Yes: 0%, No: 100%. Volume: $14 in the last 24 hours.",
  "candidates": [],
  "market_id": "898415",
  "match_status": "matched",
  "matched": true,
  "outcomes": [
    {
      "name": "Yes",
      "probability_pct": 0.1
    }
  ],
  "platform": "polymarket",
  "question": "Will Charles Leclerc be the 2026 F1 Drivers' Champion?",
  "reason": null,
  "search_url": null,
  "trade_url": "https://voxodds.com/go/polymarket/2026-f1-drivers-champion?src=answer"
}

Check a bet

Check a bookmaker's price before you bet: VoxOdds finds the prediction market for the event and compares the odds you were offered with the market's probability, giving the expected value per $100, the break-even odds and a verdict. Leave the odds empty to get just the fair price. No API key required.

Inputs

EventeventtextRequired
What the bet is on, in plain words. Be specific: VoxOdds refuses to judge when several markets fit.
Your sidesidetext
Whether you are betting it happens (Yes) or not (No).One of: Yes, No. Default: Yes.
Odds offeredoddstext
The bookmaker's odds, written any common way: decimal (2.5), American (+150 or -200) or fractional (3/1). Leave it empty for the fair price alone.

Outputs

break_even_decimal_oddsnumber
The lowest decimal odds worth taking.
candidateslist
The markets that fitted when none won outright.
checked_attext
When the check ran (ISO 8601).
edge_pointsnumber
Market probability minus implied probability, in percentage points. Positive is in your favour.
eventtext
The event checked.
expected_value_per_100number
Expected profit or loss per $100 staked.
fair_decimal_oddsnumber
The decimal odds that probability is worth.
kelly_fractionnumber
The Kelly stake as a fraction of bankroll (0 when no edge).
market_foundtrue/false
True when VoxOdds matched the event to one market. False means no verdict: see 'candidates'.
market_probability_pctnumber
The market's probability for the side, 0 to 100.
market_questiontext
The market used as the reference.
market_urltext
The reference market on VoxOdds.
offered_american_oddsnumber
The odds offered, as American odds.
offered_decimal_oddsnumber
The odds offered, as decimal odds.
offered_implied_probability_pctnumber
The probability the offered odds imply, 0 to 100.
quarter_kelly_fractionnumber
A quarter of that: a common, more cautious stake.
sidetext
The side checked.
verdicttext
VoxOdds' verdict, such as clear_value_bet, clear_bad_bet, reference_only (no odds given) or no_reference (no market found).
verdict_detailtext
The verdict explained in a sentence or two.
Example output
{
  "break_even_decimal_odds": 1000.0,
  "candidates": [],
  "checked_at": "2026-10-15T21:42:22.773144+00:00",
  "edge_points": -39.9,
  "event": "Charles Leclerc 2026 F1 champion",
  "expected_value_per_100": -99.75,
  "fair_decimal_odds": 1000.0,
  "kelly_fraction": 0.0,
  "market_found": true,
  "market_probability_pct": 0.1,
  "market_question": "Will Charles Leclerc be the 2026 F1 Drivers' Champion?",
  "market_url": "https://voxodds.com/market/898415",
  "offered_american_odds": 150.0,
  "offered_decimal_odds": 2.5,
  "offered_implied_probability_pct": 40.0,
  "quarter_kelly_fraction": 0.0,
  "side": "Yes",
  "verdict": "clear_bad_bet",
  "verdict_detail": "Your book prices Yes at 2.50 (40.0% implied). The real-money prediction market says 0.1%, so break-even is 1000.00. You are paying 39.90pp over the true probability \u2014 -99.75 expected per 100 staked."
}

Compare Polymarket and Kalshi

Quote the same bet on Polymarket and on Kalshi, fees and order-book depth included, and see which is cheaper and by how much. VoxOdds only names a winner when a person has checked the two contracts settle the same way; otherwise you get both quotes and the reasons they may differ. No API key required.

Inputs

Polymarket market IDpolymarket_idtextRequired
The Polymarket market ID, a number such as 898415. Find the best prices returns it for every matched outcome.
Kalshi tickerkalshi_tickertextRequired
The matching Kalshi ticker, such as KXF1-26-CL. Find the best prices returns it too.
Sidesidetext
Which side of the market to buy: Yes or No. Yes by default.One of: Yes, No. Default: Yes.
Amount to spend (USD)amount_usdnumber
How many dollars to spend, fees included, from $1 to $100,000. The quote walks the live order book, so a bigger amount can get a worse average price. $100 by default.From 1 to 100000. Default: 100.

Outputs

amount_usdnumber
The amount compared.
best_platformtext
The cheaper venue. Null when not comparable.
best_price_with_feesnumber
Its average price per share, fees included.
blockerslist
Why the venues could not be ranked.
comparabletrue/false
True when VoxOdds could rank the two venues. False means read 'blockers'.
extra_payout_if_wins_usdnumber
How much more it pays out if the side wins.
kalshiobject
What the amount buys on one venue right now.
match_statustext
verified_equivalent, non_equivalent or unverified.
notetext
VoxOdds' caveat about the comparison.
observationslist
Differences VoxOdds noticed between the contracts.
outcometext
The outcome both contracts pay on, when checked.
polymarketobject
What the amount buys on one venue right now.
price_advantage_pctnumber
That saving as a percentage of the dearer price.
review_evidencetext
Why the reviewer judged the contracts the same.
same_contracttrue/false
True when a person has checked both contracts settle the same way.
savings_per_sharenumber
How much less each share costs there, in dollars.
sidetext
The side compared.
Example output
{
  "amount_usd": 100.0,
  "best_platform": "polymarket",
  "best_price_with_fees": 0.001963,
  "blockers": [],
  "comparable": true,
  "extra_payout_if_wins_usd": 41597.35,
  "kalshi": {
    "amount_usd": 100.0,
    "available": true,
    "average_price": 0.01,
    "average_price_with_fees": 0.010694,
    "best_ask": 0.01,
    "best_bid": null,
    "closes_at": "2026-12-22T15:00:00Z",
    "decimal_odds": 93.51,
    "fees_usd": 6.49,
    "fully_filled": true,
    "market_id": "KXF1-26-CL",
    "note": "Size-aware order-book quote with estimated taker fee; venue rounding and cross-contract rule equivalence require confirmation.",
    "payout_if_wins_usd": 9351.0,
    "platform": "kalshi",
    "profit_if_wins_usd": 9251.0,
    "question": "Will Charles Leclerc win the F1 Drivers Championship?",
    "retrieved_at": "2026-10-15T21:42:24.101034+00:00",
    "rules": "If Charles Leclerc wins the F1 Drivers Championship, then the market resolves to Yes.\n\nKalshi is not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Governing League. All trademarks, logos, and brand names are the property of their respective owners.\n\nThis market will close and expire after a title holder is declared.",
    "shares": 9351.0,
    "side": "Yes",
    "total_cost_usd": 100.0,
    "trade_url": "https://kalshi.com/markets/KXF1-26-CL",
    "unfilled_usd": 0.0,
    "worst_price": 0.01
  },
  "match_status": "verified_equivalent",
  "note": "Compared using verified equivalent rules, current depth, and estimated taker fees.",
  "observations": [
    "venue close/expiry metadata difference: 399.0 hours"
  ],
  "outcome": "Charles Leclerc is the 2026 Formula 1 Drivers' Champion",
  "polymarket": {
    "amount_usd": 100.0,
    "available": true,
    "average_price": 0.001906,
    "average_price_with_fees": 0.001963,
    "best_ask": 0.001,
    "best_bid": null,
    "closes_at": "2026-12-06T00:00:00Z",
    "decimal_odds": 509.483473,
    "fees_usd": 2.91,
    "fully_filled": true,
    "market_id": "898415",
    "note": "Size-aware order-book quote with estimated taker fee; cross-contract rule equivalence is not assumed.",
    "payout_if_wins_usd": 50948.35,
    "platform": "polymarket",
    "profit_if_wins_usd": 50848.35,
    "question": "Will Charles Leclerc be the 2026 F1 Drivers' Champion?",
    "retrieved_at": "2026-10-15T21:42:24.280168+00:00",
    "rules": "This market will resolve according to the listed driver that finishes 1st in the driver standings for the 2026 F1 season.\n\nThis market will resolve as soon as the official results of the final scheduled race of the 2026 F1 season are known.\n\nIf multiple drivers tie for first place in the drivers standings, this market will resolve according to the tiebreak procedure used by F1 to determine the...",
    "shares": 50948.3473,
    "side": "Yes",
    "total_cost_usd": 100.0,
    "trade_url": "https://polymarket.com/event/will-charles-leclerc-be-the-2026-f1-drivers-champion",
    "unfilled_usd": 0.0,
    "worst_price": 0.002
  },
  "price_advantage_pct": 81.64,
  "review_evidence": "Both rule sets resolve Yes iff Charles Leclerc wins the 2026 F1 Drivers' Championship. Both templates exactly match the fingerprint-pinned Lewis Hamilton family anchor; the 16-day metadata difference is administrative.",
  "same_contract": true,
  "savings_per_share": 0.008731,
  "side": "Yes"
}

Find the best prices

Rank every outcome that trades on both Polymarket and Kalshi by where it is cheaper to buy right now, with fees and order-book depth counted for the amount you choose. Only outcomes a person has checked are the same contract on both venues are included. No API key required.

Inputs

Amount to spend (USD)amount_usdnumber
How many dollars to spend, fees included, from $1 to $100,000. The quote walks the live order book, so a bigger amount can get a worse average price. $100 by default.From 1 to 100000. Default: 100.
Outcome groupoutcome_grouptext
Only outcomes in this group, such as the 2028 Democratic nomination. Leave it empty for all.
Sidesidetext
Only Yes or only No. Either side by default.One of: any (Either side), Yes, No. Default: any.

Outputs

countnumber
How many outcomes came back.
generated_attext
When the prices were read (ISO 8601).
opportunitieslist
The outcomes, biggest saving first.
outcome_groupslist
Every outcome group and how much of it is quotable.
pairs_scannednumber
How many matched pairs VoxOdds checked.
Example output
{
  "count": 1,
  "generated_at": "2026-10-15T21:41:51.872420+00:00",
  "opportunities": [
    {
      "amount_usd": 100.0,
      "best_platform": "polymarket",
      "best_price_with_fees": 0.001963,
      "extra_payout_if_wins_usd": 41597.35,
      "id": "vx-82db1dc49c2e5f",
      "kalshi": {
        "average_price_with_fees": 0.010694,
        "fees_usd": 6.49,
        "shares": 9351.0,
        "total_cost_usd": 100.0,
        "worst_price": 0.01
      },
      "kalshi_ticker": "KXF1-26-CL",
      "outcome": "Charles Leclerc is the 2026 Formula 1 Drivers' Champion",
      "outcome_group": "f1_2026_champion",
      "outcome_group_name": "F1 2026 Champion",
      "polymarket": {
        "average_price_with_fees": 0.001963,
        "fees_usd": 2.91,
        "shares": 50948.3473,
        "total_cost_usd": 100.0,
        "worst_price": 0.002
      },
      "polymarket_id": "898415",
      "price_advantage_pct": 81.64,
      "reviewed_on": "2026-08-02",
      "savings_per_share": 0.008731,
      "share_url": "https://voxodds.com/opportunities/vx-82db1dc49c2e5f?amount_usd=100",
      "side": "Yes"
    }
  ],
  "outcome_groups": [
    {
      "id": "f1_2026_champion",
      "matched_pairs": 3,
      "name": "F1 2026 Champion",
      "quotable_sides": 3
    },
    {
      "id": "democratic_nominee_2028",
      "matched_pairs": 11,
      "name": "Democratic Nominee 2028",
      "quotable_sides": 0
    },
    {
      "id": "republican_nominee_2028",
      "matched_pairs": 8,
      "name": "Republican Nominee 2028",
      "quotable_sides": 0
    }
  ],
  "pairs_scanned": 22
}

Get a market

Get one prediction market with its current odds and its hourly price history over the last days, ready to chart or to check how far the odds have moved. No API key required.

Inputs

Market IDmarket_idtextRequired
The VoxOdds market ID, a number such as 5170739. Search markets and List trending markets return it as 'id'.

Outputs

categorytext
Politics, Crypto, Sports, Geopolitics or Economics. Null when VoxOdds has not filed it.
community_voteslist
VoxOdds' community vote on each outcome. Often empty.
days_leftnumber
Days until the market closes.
end_datetext
When the market closes (ISO 8601). Null when not reported.
idtext
The VoxOdds market ID: what Get a market, Get a market summary and Get a price quote (for Polymarket) take.
insight_countnumber
How many community insights VoxOdds holds on the market.
liquiditynumber
Dollars resting in the order book. Null when not reported.
outcomeslist
Every outcome with its current price and probability.
polymarket_urltext
The market on Polymarket.
price_historylist
Hourly snapshots of the prices, oldest first.
price_history_countnumber
How many snapshots the history holds.
questiontext
The market's question.
slugtext
The market's short web name on Polymarket. Null when not reported.
trading_qualitytext
VoxOdds' grade for how cleanly the market could be traded: Cleaner, Watch, Fragile or Closed/stale.
trading_quality_notetext
VoxOdds' one-line reason for the grade.
trading_quality_scorenumber
The score behind that grade, 0 to 100. Higher is cleaner.
updated_attext
When VoxOdds last refreshed the prices. Null when not reported.
volume_24hnumber
Dollars traded in the last 24 hours.
volume_totalnumber
Dollars traded since the market opened. Null when not reported.
voxodds_urltext
The market's page on VoxOdds.
warning_flagslist
Risk flags VoxOdds raised, such as 'extreme price'.
Example output
{
  "category": "Crypto",
  "community_votes": [],
  "days_left": 16,
  "end_date": null,
  "id": "5170739",
  "insight_count": 0,
  "liquidity": null,
  "outcomes": [
    {
      "name": "Yes",
      "price": 0.375,
      "probability_pct": 37.5
    }
  ],
  "polymarket_url": "https://polymarket.com/event/will-bitcoin-dip-to-77pt5k-in-october-2026?via=soft-dev-fz-llc",
  "price_history": [
    {
      "first_outcome_probability_pct": 51.5,
      "outcomes": [
        {
          "name": "Yes",
          "price": 0.515,
          "probability_pct": 51.5
        }
      ],
      "timestamp": "2026-10-15T14:19:29.269053+00:00",
      "volume_24h": 81544.586759
    }
  ],
  "price_history_count": 1,
  "question": "Will Bitcoin dip to $77,500 in October?",
  "slug": null,
  "trading_quality": "Cleaner",
  "trading_quality_note": "Better depth and less extreme pricing for research.",
  "trading_quality_score": 77.5,
  "updated_at": null,
  "volume_24h": 220686.426515,
  "volume_total": null,
  "voxodds_url": "https://voxodds.com/market/5170739",
  "warning_flags": []
}

Get a market summary

Get a short, ready-to-paste summary of one market in Markdown: the question, the odds, the money traded and links to trade it. Drop it straight into Slack, Notion or an email. No API key required.

Inputs

Market IDmarket_idtextRequired
The VoxOdds market ID, a number such as 5170739. Search markets and List trending markets return it as 'id'.

Outputs

markdowntext
The summary in Markdown, with VoxOdds' attribution.
market_idtext
The market summarised.
questiontext
The market's question, read from the summary.
voxodds_urltext
The market's page on VoxOdds.
Example output
{
  "markdown": "## Will Bitcoin dip to $77,500 in October?\n\n**Current Prediction Market Odds:**\n- **Yes**: 38%\n- **No**: 62%\n\nVolume 24h: $220,686 | Category: Crypto\n\n\n\n**Trade this market:**\n- [Polymarket](https://polymarket.com/event/will-bitcoin-dip-to-77pt5k-in-october-2026?via=soft-dev-fz-llc)\n- [Kalshi](https://kalshi.com/markets)\n\n**Full analysis & community insights:**...",
  "market_id": "5170739",
  "question": "Will Bitcoin dip to $77,500 in October?",
  "voxodds_url": "https://voxodds.com/market/5170739"
}

Get a price quote

Find out what a dollar amount really buys on one Polymarket or Kalshi market right now: VoxOdds walks the live order book and counts the fees, so you get the true average price, the shares, the payout if you win and whether the book is deep enough. No API key required.

Inputs

PlatformplatformtextRequired
Where the market trades.One of: polymarket, kalshi.
Market ID or tickermarket_idtextRequired
A Polymarket market ID (a number such as 898415, the 'id' Search markets returns) or a Kalshi ticker (such as KXF1-26-CL, the 'kalshi_ticker' Find the best prices returns).
Sidesidetext
Which side of the market to buy: Yes or No. Yes by default.One of: Yes, No. Default: Yes.
Amount to spend (USD)amount_usdnumber
How many dollars to spend, fees included, from $1 to $100,000. The quote walks the live order book, so a bigger amount can get a worse average price. $100 by default.From 1 to 100000. Default: 100.

Outputs

amount_usdnumber
The amount asked for.
availabletrue/false
True when the order book had something to sell on this side. False means no quote: read 'note' for why.
average_pricenumber
The average price per share before fees, in dollars.
average_price_with_feesnumber
The average price per share with fees counted: the number to compare venues on.
best_asknumber
The cheapest price a seller is asking. Null when nobody is.
best_bidnumber
The best price a buyer is offering. Null when nobody is.
closes_attext
When the market closes (ISO 8601).
decimal_oddsnumber
The fill expressed as bookmaker-style decimal odds, fees included, so it compares directly with a sportsbook's price.
fees_usdnumber
VoxOdds' estimate of the venue's trading fees.
fully_filledtrue/false
Whether the order book was deep enough to spend all of it.
market_idtext
The market quoted: a number on Polymarket, a ticker on Kalshi.
notetext
VoxOdds' caveat about the quote, or why there is none.
payout_if_wins_usdnumber
What the shares pay out if the side wins. Null when nothing fills.
platformtext
polymarket or kalshi.
profit_if_wins_usdnumber
The payout minus what was spent. Null when nothing fills.
questiontext
The market's question, as the venue words it.
retrieved_attext
When the order book was read (ISO 8601).
rulestext
The venue's resolution rules, verbatim.
sharesnumber
How many shares the money buys. Each pays $1 if the side wins.
sidetext
The side quoted: Yes or No.
total_cost_usdnumber
What would actually be spent, fees included.
trade_urltext
The market on the venue.
unfilled_usdnumber
The part of the amount the order book could not take.
worst_pricenumber
The highest price paid for any share in the fill.
Example output
{
  "amount_usd": 100.0,
  "available": true,
  "average_price": 0.001906,
  "average_price_with_fees": 0.001963,
  "best_ask": 0.001,
  "best_bid": null,
  "closes_at": "2026-12-06T00:00:00Z",
  "decimal_odds": 509.483473,
  "fees_usd": 2.91,
  "fully_filled": true,
  "market_id": "898415",
  "note": "Size-aware order-book quote with estimated taker fee; cross-contract rule equivalence is not assumed.",
  "payout_if_wins_usd": 50948.35,
  "platform": "polymarket",
  "profit_if_wins_usd": 50848.35,
  "question": "Will Charles Leclerc be the 2026 F1 Drivers' Champion?",
  "retrieved_at": "2026-10-15T21:42:23.559399+00:00",
  "rules": "This market will resolve according to the listed driver that finishes 1st in the driver standings for the 2026 F1 season.\n\nThis market will resolve as soon as the official results of the final scheduled race of the 2026 F1 season are known.\n\nIf multiple drivers tie for first place in the drivers standings, this market will resolve according to the tiebreak procedure used by F1 to determine the...",
  "shares": 50948.3473,
  "side": "Yes",
  "total_cost_usd": 100.0,
  "trade_url": "https://polymarket.com/event/will-charles-leclerc-be-the-2026-f1-drivers-champion",
  "unfilled_usd": 0.0,
  "worst_price": 0.002
}

Get a research note

Get one VoxOdds research note in full: the thesis, the checks it is waiting on, the price levels to reassess at, its sources and the rules for sizing a position. No API key required.

Inputs

Research notenote_idtextRequired
The note to get. Pick one from the list, or use the 'id' List research notes returns.

Outputs

alert_levelslist
The price levels at which to reassess.
base_casetext
What VoxOdds expects by default.
blockerslist
What would stop VoxOdds acting on the note.
categorytext
The market's category.
confirmationslist
What already supports the thesis.
end_datetext
When the market closes (ISO 8601).
entry_disciplinelist
VoxOdds' rules for sizing any position.
idtext
The note's ID: what Get a research note takes.
invalidationtext
What would make it wrong.
liquiditynumber
Dollars in the order book.
market_idtext
The market's ID.
market_urltext
The market on VoxOdds.
next_actiontext
What to do next.
no_probability_pctnumber
The market's current No probability, 0 to 100.
reference_probability_pctnumber
The Yes probability when the note was written, 0 to 100.
scorenumber
The thesis score, 0 to 100.
sidetext
The side the note researches.
sourceslist
Where the note's evidence comes from.
stagetext
Where the note stands, such as 'Research watch'.
stancetext
The note's position in a sentence.
thesistext
Why that side is worth researching.
titletext
The market the note is about.
trading_qualitytext
VoxOdds' trading grade for the market, such as Cleaner.
triggerslist
The checks the thesis is waiting on.
updated_attext
When the note last changed (ISO 8601).
urltext
The note on VoxOdds.
volume_24hnumber
Dollars traded in the last 24 hours.
watch_itemslist
What to keep an eye on.
yes_probability_pctnumber
The market's current Yes probability, 0 to 100.
Example output
{
  "alert_levels": [
    "YES below 58.5%: reassess whether the edge improved or the thesis broke."
  ],
  "base_case": "Base case is wait-for-confirmation: the public price alone is not enough. The setup needs rule clarity, usable depth, and a catalyst that survives primary-source review.",
  "blockers": [
    "Skip if you cannot identify a concrete source, rule detail, or timing catalyst."
  ],
  "category": "Politics",
  "confirmations": [
    "Liquid 50/50 market; useful for research and news timing"
  ],
  "end_date": "2026-11-04T04:59:00Z",
  "entry_discipline": [
    "Treat this as a price discovery watch, not a blind buy signal."
  ],
  "id": "edge-2026-balance-of-power-d-senate-d-house-ddd933cdbe20",
  "invalidation": "Skip if you cannot identify a concrete source, rule detail, or timing catalyst.",
  "liquidity": 2841357.13,
  "market_id": "562828",
  "market_url": "https://voxodds.com/market/562828",
  "next_action": "Use news, rules, and surveys before taking a side",
  "no_probability_pct": 36.5,
  "reference_probability_pct": 63.5,
  "score": 81.0,
  "side": "YES",
  "sources": [
    {
      "label": "VoxOdds Edge",
      "note": "Price discovery watch, score 81/100.",
      "url": "https://voxodds.com/edge?min_edge=0&include_risky=true"
    }
  ],
  "stage": "Research watch",
  "stance": "Price discovery watch: research YES, confirm rules and depth before sizing.",
  "thesis": "YES is the side to research because VoxOdds Edge flags: Liquid 50/50 market; useful for research and news timing. Current market pricing is roughly YES 63.5% / NO 36.5% with a setup score of 81/100.",
  "title": "2026 Balance of Power: D Senate, D House",
  "trading_quality": "Cleaner",
  "triggers": [
    {
      "detail": "Read the resolution criteria before relying on the headline.",
      "label": "Rules match the thesis",
      "state": "pending"
    }
  ],
  "updated_at": "2026-10-08T05:45:02.147957+00:00",
  "url": "https://voxodds.com/investment-insights/edge-2026-balance-of-power-d-senate-d-house-ddd933cdbe20",
  "volume_24h": 221217.24,
  "watch_items": [
    "Resolution wording and official source-of-truth for the market."
  ],
  "yes_probability_pct": 63.5
}

Get the forecast scoreboard

See how AI forecasts have scored against prediction-market prices on questions that have since resolved: accuracy and Brier score for each model, how often each beat the market, and the most recent scored forecasts. No API key required.

Inputs

None.

Outputs

ai_accuracy_pctnumber
How often the AI's favourite happened, 0 to 100.
ai_beats_market_pctnumber
How often the AI scored better than the market, 0 to 100.
ai_brier_scorenumber
VoxOdds' AI's Brier score. Lower is better.
forecasts_scorednumber
How many AI forecasts have been scored.
headlinetext
The scoreboard's main finding in a sentence.
market_accuracy_pctnumber
How often the market's favourite happened, 0 to 100.
market_brier_scorenumber
The market price's Brier score on the same questions.
markets_coverednumber
How many markets they cover.
methodologytext
How the forecasts are scored.
modelslist
Each forecasting model's record.
recent_countnumber
How many recent forecasts came back.
recent_scoreslist
The most recently scored forecasts.
updated_attext
When the scoreboard was last updated (ISO 8601).
Example output
{
  "ai_accuracy_pct": 73.69,
  "ai_beats_market_pct": 53.8,
  "ai_brier_score": 0.1823,
  "forecasts_scored": 6442,
  "headline": "Across 6442 scored forecasts, VoxOdds AI (Brier 0.182) trailed the market price (Brier 0.131) taken at the same moment. A sweep over every AI/market mixture weight (n=6442) finds no weight of AI improves on the price \u2014 the market alone is optimal so far.",
  "market_accuracy_pct": 81.39,
  "market_brier_score": 0.1314,
  "markets_covered": 1514,
  "methodology": "Hourly AI forecasts are stored with the contemporaneous market price (append-only receipts). At resolution every receipt is scored: Brier = (1 - probability assigned to the eventual winner)^2, for both the AI and the market price captured at the same timestamp. Lower is better. Brier is computed only for 2-outcome markets; a winner requires one outcome priced >=0.95 at resolution. No receipt is...",
  "models": [
    {
      "accuracy_pct": 81.1,
      "beats_market_pct": 50.7,
      "brier_score": 0.1247,
      "forecasts_scored": 11943,
      "market_brier_score": 0.1175,
      "model": "blend-mkt50-v1"
    }
  ],
  "recent_count": 1,
  "recent_scores": [
    {
      "actual_outcome": "Ashlyn Krueger",
      "ai_beat_market": false,
      "ai_brier_score": 0.1936,
      "ai_correct": true,
      "market_brier_score": 0.189225,
      "market_correct": true,
      "market_id": "5658632",
      "model": "gemini-3.7-flash-cal2",
      "predicted_outcome": "Ashlyn Krueger",
      "predicted_probability_pct": 56.0,
      "question": "Wuhan Tennis Open: Ashlyn Krueger vs Lanlana Tararudee",
      "scored_at": "2026-10-14T23:30:02.665627+00:00"
    }
  ],
  "updated_at": "2026-10-02T23:30:03.544731+00:00"
}

Get the strategy playbook

Get VoxOdds' current playbook: which simple trading tactics its backtests say are working, which to avoid, the live markets that fit them now and the guardrails to follow. No API key required.

Inputs

None.

Outputs

candidate_countnumber
How many live markets fit.
current_candidateslist
Live markets that fit a tactic now.
generated_attext
When the playbook was built (ISO 8601).
guardrailslist
VoxOdds' rules for using the playbook.
headlinetext
The playbook's conclusion in a sentence.
next_steptext
What VoxOdds suggests doing next.
strategieslist
Every tactic tested, best first.
strategies_to_avoidlist
Tactics VoxOdds says not to use right now.
strategy_countnumber
How many tactics were tested.
top_strategyobject
One trading tactic and how it has performed.
Example output
{
  "candidate_count": 1,
  "current_candidates": [
    {
      "category": "Sports",
      "confidence": 86.0,
      "invalidation": "Skip if you cannot identify a concrete source, rule detail, or timing catalyst.",
      "market_id": "5597174",
      "prices": "YES 50% / NO 50%",
      "risk_level": "low",
      "score": 98.9,
      "side": "Research first",
      "signal": "Liquid 50/50 market; useful for research and news timing",
      "strategy_name": "Price discovery",
      "suggested_action": "Use news, rules, and surveys before taking a side",
      "time_horizon": "Intraday to weekly",
      "title": "Shanghai Rolex Masters: Hubert Hurkacz vs Alejandro Davidovich Fokina",
      "volume_24h": 1006390.8489050003,
      "voxodds_url": "https://voxodds.com/market/5597174"
    }
  ],
  "generated_at": "2026-10-15T21:21:55.370046+00:00",
  "guardrails": [
    "Do not treat a market price as executable fair value without checking depth and spread."
  ],
  "headline": "No strategy has enough clean evidence to be a default entry rule right now.",
  "next_step": "Use Edge for research and avoid fragile markets until more snapshots accumulate.",
  "strategies": [
    {
      "average_return_points": 0.34,
      "best_return_points": 75.45,
      "description": "Bet against a move that already exceeded the threshold.",
      "hit_rate_pct": 41.0,
      "id": "mean_reversion",
      "in_plain_words": "Look for a large move, then take the other side only if the catalyst looks weak or misunderstood.",
      "losses": 151,
      "median_return_points": 0.0,
      "name": "Fade fast moves",
      "sample_trades": [
        {
          "entered_at": "2026-10-15T11:15:31.787843+00:00",
          "entry_price": 0.245,
          "exit_price": 0.9995,
          "exited_at": "2026-10-15T12:16:36.134991+00:00",
          "market_id": "5649739",
          "prior_move_points": -52.5,
          "return_points": 75.45,
          "side": "YES"
        }
      ],
      "setup": "A market moved quickly over the lookback window and still has enough volume to exit.",
      "standing": "neutral",
      "trades": 256,
      "verdict": "No clear edge in the current sample.",
      "when_to_avoid": "Do not fade if the catalyst directly settles the market or fresh volume keeps confirming the move.",
      "wins": 105,
      "worst_return_points": -61.0
    }
  ],
  "strategies_to_avoid": [
    {
      "average_return_points": 0.01,
      "best_return_points": 44.3,
      "description": "Bet against very high YES or very low YES prices over the horizon.",
      "hit_rate_pct": 12.3,
      "id": "extreme_fade",
      "in_plain_words": "Look for 85%+ or 15%- prices that may be overconfident before final resolution.",
      "losses": 2116,
      "median_return_points": 0.0,
      "name": "Fade extreme prices",
      "sample_trades": [
        {
          "entered_at": "2026-10-15T14:19:29.269053+00:00",
          "entry_price": 0.136,
          "exit_price": 0.579,
          "exited_at": "2026-10-15T15:07:45.337438+00:00",
          "market_id": "5432714",
          "prior_move_points": 6.1,
          "return_points": 44.3,
          "side": "YES"
        }
      ],
      "setup": "Market price is extreme but not actually settled.",
      "standing": "avoid",
      "trades": 2414,
      "verdict": "Avoid using this tactic as a default entry rule right now.",
      "when_to_avoid": "Do not fade near-settled markets, expiring markets, or outcomes with an official result already available.",
      "wins": 298,
      "worst_return_points": -12.45
    }
  ],
  "strategy_count": 1,
  "top_strategy": {
    "average_return_points": 0.34,
    "best_return_points": 75.45,
    "description": "Bet against a move that already exceeded the threshold.",
    "hit_rate_pct": 41.0,
    "id": "mean_reversion",
    "in_plain_words": "Look for a large move, then take the other side only if the catalyst looks weak or misunderstood.",
    "losses": 151,
    "median_return_points": 0.0,
    "name": "Fade fast moves",
    "sample_trades": [
      {
        "entered_at": "2026-10-15T11:15:31.787843+00:00",
        "entry_price": 0.245,
        "exit_price": 0.9995,
        "exited_at": "2026-10-15T12:16:36.134991+00:00",
        "market_id": "5649739",
        "prior_move_points": -52.5,
        "return_points": 75.45,
        "side": "YES"
      }
    ],
    "setup": "A market moved quickly over the lookback window and still has enough volume to exit.",
    "standing": "neutral",
    "trades": 256,
    "verdict": "No clear edge in the current sample.",
    "when_to_avoid": "Do not fade if the catalyst directly settles the market or fresh volume keeps confirming the move.",
    "wins": 105,
    "worst_return_points": -61.0
  }
}

List edge signals

List VoxOdds' ranked research signals: markets where the price is moving fast, looks mispriced or is close to settling, each with a score, a risk level, what to check and what would make it wrong. For research, not a buy list. No API key required.

Inputs

Maximum signalslimitnumber
How many signals to return, 1 to 100. 30 by default.From 1 to 100. Default: 30.
Minimum edge (points)min_edgenumber
Only signals with at least this much edge after costs, in percentage points of price, 0 to 25. 1 by default; 0 includes watch-only signals.From 0 to 25. Default: 1.
Include risky marketsinclude_riskytrue/false
Also include markets VoxOdds flags as high risk, such as thin or about-to-close ones. Off by default.Default: false.

Outputs

countnumber
How many signals came back.
disclaimertext
VoxOdds' caveat about the signals.
generated_attext
When the signals were computed (ISO 8601).
signalslist
The signals, strongest first.
signals_availablenumber
How many signals VoxOdds holds in all.
Example output
{
  "count": 1,
  "disclaimer": "Signals are estimates before live fills, fees, taxes, limits, and resolution risk. Not financial advice.",
  "generated_at": "2026-10-15T21:21:48.581268+00:00",
  "signals": [
    {
      "best_platform": "polymarket",
      "category": "Sports",
      "confidence": 67.0,
      "created_at": "2026-10-15T21:21:48.581268+00:00",
      "estimated_costs_points": 0.4,
      "gross_edge_points": 28.0,
      "id": "momentum:5524116",
      "invalidation": "Invalid if no credible catalyst explains the move or if order-book depth disappears.",
      "market_id": "5524116",
      "net_edge_points": 0.0,
      "outcome_prices": [
        0.605
      ],
      "risk_flags": [
        "very close to close"
      ],
      "risk_level": "low",
      "risk_score": 33.0,
      "score": 100.0,
      "side": "YES",
      "signal": "YES moved +28.0pp across 14 recent snapshots",
      "signal_type": "momentum_watch",
      "strategy_name": "Catalyst momentum",
      "suggested_action": "Find the catalyst before chasing; skip if the move is only thin-liquidity drift",
      "time_horizon": "Hours to days",
      "title": "LoL: Cloud9 vs Karmine Corp (BO5) - Worlds Play-In",
      "volume_24h": 1364976.996101,
      "voxodds_url": "https://voxodds.com/market/5524116"
    }
  ],
  "signals_available": 202
}

List research notes

List VoxOdds' public research notes: the markets it is watching, the side it is researching and why, what would prove it wrong and where the price stands now. No API key required.

Inputs

None.

Outputs

countnumber
How many notes came back.
guardrailslist
VoxOdds' rules for using the notes.
noteslist
The notes.
updated_attext
When the notes were last refreshed (ISO 8601).
Example output
{
  "count": 1,
  "guardrails": [
    "These are research notes, not individualized financial advice."
  ],
  "notes": [
    {
      "base_case": "Base case is wait-for-confirmation: the public price alone is not enough. The setup needs rule clarity, usable depth, and a catalyst that survives primary-source review.",
      "category": "Politics",
      "confirmations": [
        "Liquid 50/50 market; useful for research and news timing"
      ],
      "end_date": "2026-11-04T04:59:00Z",
      "id": "edge-2026-balance-of-power-d-senate-d-house-ddd933cdbe20",
      "invalidation": "Skip if you cannot identify a concrete source, rule detail, or timing catalyst.",
      "liquidity": 2841357.13,
      "market_id": "562828",
      "market_url": "https://voxodds.com/market/562828",
      "next_action": "Use news, rules, and surveys before taking a side",
      "no_probability_pct": 36.5,
      "reference_probability_pct": 63.5,
      "score": 81.0,
      "side": "YES",
      "stage": "Research watch",
      "stance": "Price discovery watch: research YES, confirm rules and depth before sizing.",
      "thesis": "YES is the side to research because VoxOdds Edge flags: Liquid 50/50 market; useful for research and news timing. Current market pricing is roughly YES 63.5% / NO 36.5% with a setup score of 81/100.",
      "title": "2026 Balance of Power: D Senate, D House",
      "trading_quality": "Cleaner",
      "updated_at": "2026-10-08T05:45:02.147957+00:00",
      "url": "https://voxodds.com/investment-insights/edge-2026-balance-of-power-d-senate-d-house-ddd933cdbe20",
      "volume_24h": 221217.24,
      "watch_items": [
        "Resolution wording and official source-of-truth for the market."
      ],
      "yes_probability_pct": 63.5
    }
  ],
  "updated_at": "2026-10-15T21:41:42.420629+00:00"
}

The 20 prediction markets with the most money traded in the last 24 hours, with their live odds: a quick read on what people are betting on right now. No API key required.

Inputs

None.

Outputs

countnumber
How many markets came back.
marketslist
The markets, most traded first.
Example output
{
  "count": 1,
  "markets": [
    {
      "category": null,
      "days_left": null,
      "end_date": null,
      "id": "5126779",
      "liquidity": null,
      "outcomes": [
        {
          "name": "Yes",
          "price": 0.125,
          "probability_pct": 12.5
        }
      ],
      "polymarket_url": "https://polymarket.com/event/will-indiana-enact-a-data-center-moratorium-by-december-31-2027?via=soft-dev-fz-llc",
      "question": "Will Indiana enact a data center moratorium by December 31, 2027?",
      "slug": "will-indiana-enact-a-data-center-moratorium-by-december-31-2027",
      "trading_quality": null,
      "trading_quality_note": null,
      "trading_quality_score": 60.5,
      "updated_at": null,
      "volume_24h": 2101479.8173089996,
      "volume_total": null,
      "voxodds_url": "https://voxodds.com/market/5126779",
      "warning_flags": []
    }
  ]
}

Run a backtest

Test simple tactics (follow a fast move, fade a fast move, fade extreme prices) against VoxOdds' stored hourly prices and see how often each would have won. You choose how big a move counts and how long to hold. Prices only: fees and fills are not counted. No API key required.

Inputs

Move measured over (hours)lookback_hoursnumber
How many hours back a price move is measured over, 1 to 72. 6 by default.From 1 to 72. Default: 6.
Hold for (hours)horizon_hoursnumber
How many hours each simulated trade is held, 1 to 168. 12 by default.From 1 to 168. Default: 12.
Minimum move (points)min_move_pointsnumber
How big a move has to be to count, in percentage points of price (a move from 40% to 45% is 5), 1 to 50. 5 by default.From 1 to 50. Default: 5.
Minimum daily volume (USD)min_volumenumber
Skip markets that traded less than this in the last 24 hours. $1,000 by default.At least 0. Default: 1000.

Outputs

countnumber
How many tactics were tested.
disclaimertext
VoxOdds' caveat about the backtest.
generated_attext
When the backtest ran (ISO 8601).
horizon_hoursnumber
The holding time used.
lookback_hoursnumber
The move window used.
markets_testednumber
How many markets had enough price history.
min_move_pointsnumber
The minimum move used.
min_volumenumber
The minimum daily volume used.
strategieslist
Each tactic and how it would have done.
Example output
{
  "count": 1,
  "disclaimer": "Backtest is mark-to-market on stored hourly snapshots. It excludes fees, fills, taxes, limits, and final settlement risk.",
  "generated_at": "2026-10-15T21:33:43.769528+00:00",
  "horizon_hours": 12,
  "lookback_hours": 6,
  "markets_tested": 92,
  "min_move_points": 5.0,
  "min_volume": 1000.0,
  "strategies": [
    {
      "average_return_points": 5.54,
      "best_return_points": 28.5,
      "description": "Bet against a move that already exceeded the threshold.",
      "hit_rate_pct": 73.5,
      "id": "mean_reversion",
      "in_plain_words": null,
      "losses": 9,
      "median_return_points": 4.0,
      "name": "Fade fast moves",
      "sample_trades": [
        {
          "entered_at": "2026-10-14T13:07:30.125880+00:00",
          "entry_price": 0.53,
          "exit_price": 0.245,
          "exited_at": "2026-10-15T01:00:53.200999+00:00",
          "market_id": "2589813",
          "prior_move_points": 34.5,
          "return_points": 28.5,
          "side": "NO"
        }
      ],
      "setup": null,
      "standing": null,
      "trades": 34,
      "verdict": null,
      "when_to_avoid": null,
      "wins": 25,
      "worst_return_points": -8.0
    }
  ]
}

Search markets

Find prediction markets by keyword and category, with live odds from Polymarket: each outcome's price and probability, the money traded, when it closes, and VoxOdds' grade for how cleanly it could be traded. Busiest markets first. No API key required.

Inputs

Search forquerytext
Words to look for in the market's question. Leave it empty to list the busiest markets.
Categorycategorytext
Only markets in this category. Leave it empty for all.One of: Politics, Crypto, Sports, Geopolitics, Economics.
Trading qualitytrading_qualitytext
Only markets with this VoxOdds trading grade. Open markets of every grade by default.One of: live (Open markets (all grades)), clean (Cleaner: better depth, less extreme prices), watch (Watch: usable, needs confirmation), fragile (Fragile: quotes can move or fill badly), closed (Closed or stale), all (Everything, open and closed). Default: live.
Maximum marketslimitnumber
How many markets to return, 1 to 200. 50 by default.From 1 to 200. Default: 50.

Outputs

countnumber
How many markets came back.
marketslist
The markets, busiest first.
Example output
{
  "count": 1,
  "markets": [
    {
      "category": "Crypto",
      "days_left": 16,
      "end_date": "2026-11-01T04:00:00Z",
      "id": "5170739",
      "liquidity": 59085.076,
      "outcomes": [
        {
          "name": "Yes",
          "price": 0.375,
          "probability_pct": 37.5
        }
      ],
      "polymarket_url": "https://polymarket.com/event/will-bitcoin-dip-to-77pt5k-in-october-2026?via=soft-dev-fz-llc",
      "question": "Will Bitcoin dip to $77,500 in October?",
      "slug": "will-bitcoin-dip-to-77pt5k-in-october-2026",
      "trading_quality": "Cleaner",
      "trading_quality_note": "Better depth and less extreme pricing for research.",
      "trading_quality_score": 77.5,
      "updated_at": "2026-10-15T21:20:46.728455+00:00",
      "volume_24h": 220686.426515,
      "volume_total": 433619.51109599986,
      "voxodds_url": "https://voxodds.com/market/5170739",
      "warning_flags": []
    }
  ]
}

On this page