Developer and API

Polymarket runs two public APIs, and for most jobs you want Gamma

Polymarket runs two public APIs. Gamma lists markets in 122ms with no key, the CLOB carries the book. Plus the paging trap.

Last checked 20 August 2026 · 4 sources

Polymarket exposes two separate public APIs and neither one needs a key to read from. Gamma answers "what markets exist and what are they priced at" and returned a single market in 122ms when we called it on 20 August 2026. The CLOB answers "what is actually resting on the order book" and returned 1,823,355 bytes in one response on the same day. If you are building a scanner, a dashboard or anything that reads prices, Gamma is the one you want. The CLOB is for when you need depth or you intend to trade.

Almost every "Polymarket API" tutorial online covers one of them and does not mention that the other exists.

The two endpoints, side by side

Both were called direct on 20 August 2026 at 11:42 UTC with no authentication and no key.

GammaCLOB
Basegamma-api.polymarket.comclob.polymarket.com
Answerswhat markets exist, and their priceswhat is resting on the book
Auth to readnonenone
Response time measured122ms144ms
One response returned7,336 bytes at limit=11,823,355 bytes
Cache-Controlpublic, max-age=300public, max-age=30
Paginglimit and offsetcursor, via next_cursor
Shapea bare JSON arrayan object wrapping data

That last row is the first thing that breaks people. Gamma hands you an array directly. The CLOB hands you an object with data, next_cursor, limit and count. Code written against one will throw against the other.

Gamma caches for five minutes, so polling faster buys nothing

Gamma sends Cache-Control: public, max-age=300. Five minutes. Our scanner runs a 60 second cycle, which means roughly four scans in five see Polymarket prices that have not moved because the edge is still serving the same cached copy. That is their caching, not a rate limit, and asking more often is not punished. It is simply not answered with anything new.

If you are building something that needs faster than five minute prices from Polymarket, Gamma will not give it to you regardless of how hard you poll. The CLOB caches at max-age=30, so that is where to go instead.

The fields you actually want off a Gamma market

A Gamma market object carries well over forty fields. These are the ones our scanner reads:

  • bestAsk and bestBid, the top of book. This is your fill price, not the

probability shown on the website.

  • clobTokenIds, which links the market to its CLOB order book if you need

depth later.

  • conditionId, the on-chain identifier.
  • closed, active and acceptingOrders. All three matter and they are not

the same thing. A market can be active and not accepting orders.

  • liquidity, which is what tells you whether the price you are reading can

absorb any size at all.

The website shows a rounded probability. bestAsk is what you would pay. On a long shot those two diverge enough to erase an edge on their own, because a contract displayed as "2%" can have a best ask at 2.1 cents, and on a 3.8 cent gross spread that 0.1 is a quarter of it.

The paging trap: offset, not page number

Gamma pages by offset, counted in rows, not by page number:

https://gamma-api.polymarket.com/markets?limit=100&offset=0&closed=false
https://gamma-api.polymarket.com/markets?limit=100&offset=100&closed=false

We confirmed on 20 August that offset=100 returns a different slice from offset=0. Passing page=2 does not error. It is ignored, and you get the first slice again, silently. Anyone who has built a collector and found their "5,000 markets" contains the same 100 rows fifty times has hit this.

Our own collector pulls 600 markets across 6 pages with a tag filter of politics, economics, crypto and sports. That is a deliberate slice, not the whole venue. Polymarket carries far more than 600 live markets and any claim about "all of Polymarket" built on 6 pages is wrong.

The CLOB returns 1.8MB in one go

The single most surprising measurement. clob.polymarket.com/markets with an empty next_cursor returned 1,823,355 bytes in 144ms. That is one response, not a paged sequence.

Its market objects carry fields Gamma does not, and two matter if you are costing a trade:

  • minimum_tick_size, the smallest price increment. This decides whether a

spread you calculated is even expressible as an order.

  • minimum_order_size, the floor on size.
  • maker_base_fee, carried per market rather than assumed globally.
  • neg_risk, which flags negative-risk markets where the outcomes are linked.

If you are computing edges, minimum_tick_size is not optional. An edge of half a tick is not an edge, it is a rounding artefact.

Fees are per category, and the API will not tell you which

Polymarket's taker fee depends on the market's category, and the rate is set out in their published schedule rather than returned on the market object:

CategoryTaker rate
crypto0.07
sports, economics, culture, weather, other0.05
finance, politics, mentions, tech0.04
geopolitical0.00

Makers are charged 0.00. That is zero, not a discount, and it is a settled fact from Polymarket's own documentation.

The fee itself is rate x contracts x P x (1 - P), which peaks at the middle of the price range and falls away at both ends. At a price of 0.50 a politics contract costs 0.04 x 0.5 x 0.5 = 1 cent per contract to take. At 0.05 it costs 0.04 x 0.05 x 0.95 = 0.19 cents. Cheap contracts are cheaper to trade in absolute terms and more expensive as a share of what you staked, which is the opposite of what most people assume.

Your code has to map the market to a category itself. Getting this wrong in the safe direction costs you nothing; getting it wrong in the generous direction makes every edge you compute too large.

What we could not verify

  • Rate limits. We have not been rate limited by either endpoint at a 60

second cycle, and we have not tried to find the ceiling. We do not know what it is and will not guess. Nothing on this page should be read as permission to hammer either API.

  • Whether maker_base_fee on a CLOB market ever differs from zero. The

field exists. We have not audited enough markets to say whether it varies, so we describe the field and stop there.

  • Write access. Everything here is read-only. We have never placed an

order through the CLOB and cannot describe the signing flow from experience.

Questions people actually ask

Does the Polymarket API need a key? Not for reading. Both Gamma and the CLOB answered unauthenticated requests on 20 August 2026, returning HTTP 200 in 122ms and 144ms respectively. Placing orders is a different matter and does require credentials and signing, which this page does not cover.

Which Polymarket API gives current prices? Gamma, via bestAsk and bestBid on a market object. Be aware it caches for 300 seconds, so a price you read can be up to five minutes old. The CLOB caches for 30 seconds if you need fresher.

Why does the price on the website differ from the API? The website shows a rounded probability, the API returns the actual top of book. A market shown as 2% can carry a best ask of 2.1 cents. On a spread of 3.8 cents that 0.1 difference is a quarter of the whole edge.

How do I get every Polymarket market? Page with limit and offset, increasing offset by your limit each time, and stop when a response comes back short. Do not pass page, which is ignored without error and silently returns the first slice repeatedly.

Is the Polymarket API free? Reading is free and unauthenticated as of 20 August 2026. We have found no published pricing for read access and no paywall in our own use. We have not established what the rate limits are, so free does not mean unlimited.

What is the difference between Gamma and the CLOB? Gamma is a catalogue: what markets exist, what they are called, what they are priced at. The CLOB is the order book itself: depth, tick size, minimum order size. Use Gamma to find candidates, the CLOB to check whether the size you want actually exists.

Sources

Every figure on this page came from a request this project made on the date stamped beside it. Response times are single measurements from one machine in one location, not benchmarks, and yours will differ.

  1. https://gamma-api.polymarket.com/markets Polymarket Gamma API, markets endpoint. Called direct 20 Aug 2026 11:42 UTC. HTTP 200, 122ms, 7,336 bytes for limit=1, Cache-Control public max-age=300.
  2. https://clob.polymarket.com/markets Polymarket CLOB API, markets endpoint. Called direct 20 Aug 2026 11:42 UTC. HTTP 200, 144ms, 1,823,355 bytes, Cache-Control public max-age=30, cursor paged.
  3. https://docs.polymarket.com/ Polymarket developer documentation. Category fee schedule, order book concepts.
  4. PredictionEdge scanner, scanner/market_intel.py : our own client. Offset paging, 600 markets across 6 pages, tag filtering. Timings logged 19 and 20 Aug 2026.