Home › Guides › How to use the free Polymarket odds API

How to use the free Polymarket odds API

Updated September 25, 2026 · facts checked against the dated sources listed below

This site publishes Polymarket odds as static JSON and CSV files that anyone can download without a key or sign-up. Start with the index at /api/v1/odds/index.json, follow each market's api link for the detail, and credit the data under CC BY 4.0.

Step 1: download the index

Every file lives under https://polymarkettrader.com/api/v1/ and needs nothing more than an HTTP GET. The index, /api/v1/odds/index.json, lists every tracked market, 1,092 on September 25, 2026, with slug, title, category, url, api, leader, probability, volume, volume_24h and end_date. Probabilities run from 0 to 1, volumes are in dollars, and end_date can be empty. The top of the file adds updated, count, license and an attribution object.

From a terminal, curl saves the file; the --compressed flag asks for a compressed transfer, and python3 -m json.tool prints it readably:

curl -s --compressed -o odds.json https://polymarkettrader.com/api/v1/odds/index.json
python3 -m json.tool odds.json | head -n 30
curl -s -O https://polymarkettrader.com/api/v1/accuracy.csv
head -n 3 accuracy.csv

See also: Free odds API and endpoints

Step 2: open one market

Each index entry's api field is the address of that market's own file, /api/v1/odds/ followed by the slug and .json. It repeats the basics and adds polymarket_url, closed, updated, liquidity and outcomes, each with name, probability, change_24h (the move over 24 hours as a fraction, empty when there is no earlier price), volume and closed. A history object holds, for each outcome, a list of [unix time, price] pairs covering up to 30 days at 12-hour steps. license_url and an attribution object with text, url and ready-made html complete the file.

The Python example below uses only the standard library. It lists the five busiest markets, opens the busiest one and prints its open outcomes and the credit line. It sends its own User-Agent header, because at the time of writing our CDN rejects the default one from Python's urllib with a 403.

import json
import urllib.request

HEADERS = {"User-Agent": "my-odds-script/1.0 ([email protected])"}


def get_json(url):
    request = urllib.request.Request(url, headers=HEADERS)
    with urllib.request.urlopen(request, timeout=30) as response:
        return json.load(response)


index = get_json("https://polymarkettrader.com/api/v1/odds/index.json")
print(index["count"], "markets, updated", index["updated"])

busiest = sorted(index["markets"], key=lambda m: m["volume_24h"] or 0, reverse=True)[:5]
for m in busiest:
    print(f'{m["title"]}: {m["leader"]} {m["probability"]:.1%}, 24h volume ${m["volume_24h"] or 0:,.0f}')

market = get_json(busiest[0]["api"])
for o in [o for o in market["outcomes"] if not o["closed"]][:5]:
    moved = "n/a" if o["change_24h"] is None else f'{o["change_24h"] * 100:+.1f} pts'
    points = len(market["history"].get(o["name"], []))
    print(f'  {o["name"]}: {o["probability"]:.1%} ({moved} in 24h), {points} history points')
print(market["attribution"]["text"], market["attribution"]["url"], market["license"])

See also: How to track Polymarket price history

Step 3: use topics and datasets

Topic files group live markets: /api/v1/topics/index.json lists each topic with slug, name, category, a market count, url and api, and a topic file such as /api/v1/topics/bitcoin.json lists its markets with title, leader, probability, change_24h, volume_24h, volume, end_date, url and polymarket_url. In a web page or the browser console, fetch reads them directly, as below. fetch does not fail on an HTTP error status, so check res.ok.

Research datasets come as CSV files under /api/v1/: accuracy.csv (resolved markets with the price 30, 7 and 1 days before the close and the result), resolution-time.csv, crypto-accuracy.csv, polymarket-kalshi-gaps.csv and biggest-markets.csv; accuracy.csv and resolution-time.csv are re-collected weekly. Other files follow the same pattern, among them /api/v1/new-markets.json for markets opened in the last seven days, /api/v1/compare/polymarket-kalshi.json for events priced on both Polymarket and Kalshi and /api/v1/fees.json for Polymarket's fee rates. A machine-readable description of the endpoints is at /api/v1/openapi.json.

async function showTopic(slug) {
  const res = await fetch("https://polymarkettrader.com/api/v1/topics/" + slug + ".json");
  if (!res.ok) throw new Error("HTTP " + res.status);
  const topic = await res.json();
  for (const m of topic.markets.slice(0, 5)) {
    const pct = (m.probability * 100).toFixed(1);
    console.log(m.title + ": " + m.leader + " " + pct + "% (ends " + (m.end_date || "n/a") + ")");
  }
  console.log(topic.attribution.text + " " + topic.attribution.url + " (" + topic.license + ")");
}

showTopic("bitcoin");

See also: Free Polymarket data

Step 4: match the refresh rhythm

The odds files are rebuilt about twice a day, so check the updated field, in UTC, before assuming anything changed; polling more than once an hour gains nothing. There is no key and no published rate limit. The server sends an ETag, and a client that repeats the request with If-None-Match gets 304 Not Modified and an empty body while the file is unchanged. Asking for compression, as curl's --compressed flag does, cut the index from about 518 KB to about 73 KB in our test.

For live order books and trades, go to Polymarket's own public APIs: its documentation lists limits such as 500 requests per 10 seconds for the Gamma API's events endpoint and 1,500 per 10 seconds for CLOB order books, and throttles requests above them.

See also: Polymarket odds today

Step 5: credit the data

The data is published under CC BY 4.0, which allows any use, including commercial, if you give appropriate credit, link to the license and say whether you changed anything. The simplest way is to show the attribution text and url from the file you used, with the date from updated, next to the numbers. The prices come from Polymarket's public APIs; this site is not affiliated with Polymarket, and Polymarket's own terms cover its website and API.

See also: How to cite Polymarket odds · How to get Polymarket odds in Google Sheets

Sources

Frequently asked questions

Do I need an API key?

No. The files are static, need no key or sign-up, and work with any HTTP client that sends its own User-Agent.

How often is the data updated?

The odds files are rebuilt about twice a day; accuracy.csv and resolution-time.csv are re-collected weekly. Each JSON file's updated field says when it was built.

Is this a real-time API?

No. It suits dashboards, research, newsletters and bots that are fine with prices a few hours old. For live quotes, use Polymarket's own APIs.

Can I use the data in a commercial product?

Yes. CC BY 4.0 allows commercial use as long as you give credit, link to the license and indicate any changes.

Polymarket View is independent and not affiliated with Polymarket. Educational information, not financial advice. All guides · How market types work · Glossary · Polymarket odds today