Polymarket API Guide: How to Get Prediction Market Data

Reference · 4 min read · published 2026-07-27 · updated 2026-07-27

Polymarket exposes several public APIs, and the most common mistake is calling the wrong one. Metadata, live prices, wallet history and leaderboards live in different places, each with its own conventions. This is a practical map, written from having built an analytics site on top of them.

Which API serves what

A common task usually spans two of them: to display a market card you need Gamma for the question and CLOB for a price you can act on; to display a trader you need the data API for positions and Gamma to turn condition IDs into readable titles.

Reading the catalogue

Events are the unit users think in - one question, one page - and each event contains one or more markets. A binary question has a single market; a "who wins?" question has one market per candidate.

Useful conventions worth knowing before you write a parser:

Prices: midpoint versus book

The single number attached to a market is a midpoint. It is fine for display and misleading for execution: it says nothing about how much size sits at that level. If your application implies an actionable price - a screener, a yield calculator, an arbitrage alert - read the book and use the side you would actually hit, or your numbers will be systematically optimistic.

The same caution applies to fees. Fee parameters are attached per market and have been adjusted more than once; read them from the market rather than hardcoding a table that quietly goes stale.

Rate limits and how to stay under them

The public endpoints are rate limited per endpoint, and a naive client that fetches on every page view will hit those limits with a modest number of visitors. Three things solve almost all of it:

  1. Cache at the edge. Most data does not need to be fresher than a few seconds. A short shared cache turns thousands of visitor requests into a handful of upstream calls.
  2. Respect pagination caps. Endpoints enforce their own maximum page size and reject larger requests outright rather than truncating - the leaderboard caps at 50 rows per request, for instance. Walk pages instead of asking for everything.
  3. Batch and deduplicate. Rendering 50 market cards should not mean 50 separate lookups for the same tag.

Send a descriptive User-Agent while you are at it. Some endpoints are unfriendly to clients that send none, and it makes you a good citizen if something you wrote misbehaves.

Pitfalls that cost real time

A free endpoint you can use

We expose one of our own derived datasets publicly: the near-certain market screener at /api/v1/markets-99, returning JSON with price, annualised return and end date for markets trading above 99%. It is documented on the API page, requires no key, and is CORS-enabled. It exists because computing it correctly requires joining catalogue data with book data and annualising by time to resolution - which is exactly the kind of work worth doing once.

If you would rather not build it

Everything described here is already assembled on this site: live odds across every market, the trader leaderboard with wallet-level history, holding rewards and LP reward tracking, and category pages for crypto, politics and sports. Reading it here first is a reasonable way to work out what your own integration actually needs.

More Polymarket guides →