API & MCP server
Everything on this site is available as JSON, and as an MCP server an assistant can call directly. Free, no key, no rate limit worth mentioning. Attribution to votepredictor.com is the only ask. Forecasts rebuild daily; last run 2026-08-26.
JSON API
Base URL https://votepredictor.com/api/v1. CORS is open, responses are edge-cached, and the index is self-describing — an agent can work out every call from it without reading this page.
GET /api/v1/race/{race_id}One race: win probability, predicted margin, whether it came from polls or fundamentals, how far it has moved this cycle, and the candidates. Race ids are {year}_{OFFICE}_{location} — 491 on file, e.g. 2026_SEN_OH, 2026_HOUSE_CA-12. The API covers the current cycle; resolved races back to 1998 are published as pages rather than JSON, and their ids return not_in_api with a link.
GET /api/v1/chamber/{senate|house}Control probability with an 80% seat range, every seat on the ballot, and the races that have moved most this cycle.
/api/v1/chamber/senateGET /api/v1/member/{bioguide_id}A member of Congress: party, ideology score, reported net worth from financial disclosures, and the 2026 race for their seat.
/api/v1/member/P000197GET /api/v1/ratings?office=ALLDifficulty-adjusted accuracy for every forecaster, model, prediction market and pollster on resolved races — the answer to “whose forecast should I trust”.
/api/v1/ratings?office=SENMCP server
Streamable HTTP, so there is nothing to install — point a client at the URL. Tools take what a person actually says (“Ohio”, “CA-12”, “Pelosi”) rather than ids you would have to look up first.
{
"votepredictor": {
"url": "https://votepredictor.com/api/mcp"
}
}forecast_race— one 2026 race, by state or districtchamber_outlook— Senate or House control, and what has movedforecaster_accuracy— the track record, difficulty-adjustedmember_profile— a member of Congress and their race
Three conventions
These are what make the data safe to quote. Please carry them through — an answer built on this should be no more confident than the forecast behind it.
Nothing is certain. p_dem_win is the Democratic win probability, clamped to 0.01–0.99. An election that has not happened is never 0% or 100%, however safe the seat.
Provenance is always stated. source is polls or fundamentals. Nobody surveys Wyoming, so its forecast comes from state lean, incumbency and the national environment instead. Polls take precedence wherever they exist: measured against the seats holding both, the fundamentals model agrees with the poll-driven one on 15 of 16 safe races but only 3 of 7 competitive ones.
Some races publish nothing. Where a candidate has left the ballot, the endpoint returns forecast: null with a reason instead of a number. The stored probability describes a matchup that no longer exists. A race we hold nothing for returns 404 — a different answer, deliberately.
How the forecasts are made: methodology. How accurate they have been: the track record. A plain-text summary for crawlers lives at /llms.txt.
Something missing, or a field you need? The data behind every page is already public — open an issue on GitHub.