BrainResearchHub
Independent research on prediction markets, perpetual futures, and trading infrastructure

Polymarket API Rate Limits: Every Endpoint (2026)

Ahmed Trading· sdk · Updated October 2026

Polymarket enforces two rate-limit layers: IP-based Cloudflare throttling (global 15,000 requests per 10 seconds across all APIs, with per-service tables below) and per-signer token buckets on CLOB order/cancel endpoints — Standard tier gets 40 orders per second with burst 60, scaling up to 600/s at the $10M Elite tier. Exceeding a limit delays or queues requests rather than hard-rejecting them; true overruns return 429 with a Retry-After header.

What are the IP-based limits per service?

Service General limit Notable endpoints
Gamma 4,000 req/10s /events 500, /markets 300, /public-search 350
Data API v1 1,000 req/10s /trades 200, /positions 150
Data API v2 800 req/10s /v2/trades 300, /v2/positions 200, /v2/prices-history 200
CLOB 9,000 req/10s /book 1,500, /price 1,500, /prices-history 1,000
Bridge 50 req/10s —
Relayer 25 req/1min /submit

What are the per-signer trading limits?

Token buckets scoped to your signer address (the credentials’ address), separate from IP limits. Tier eligibility follows the maker wallet’s trailing 30-day volume, refreshed every 3 hours:

Tier 30-day volume Orders/s Burst Cancels/s Burst
Standard — 40 60 80 120
Copper $30k 60 90 120 180
Bronze $50k 80 120 160 240
Silver $100k 200 300 400 600
Gold $500k 400 600 800 1,200
Platinum $2.5M 450 675 900 1,350
Diamond $5M 525 787 1,050 1,575
Elite $10M 600 900 1,200 1,800

Key mechanics:

How should a bot handle 429s?

import time

def call_with_backoff(fn, *args, **kwargs):
    while True:
        r = fn(*args, **kwargs)
        if r.status_code != 429:
            return r
        wait = int(r.headers.get("Retry-After", 1))
        time.sleep(wait)

Rules that keep you out of trouble:

  1. Honor Retry-After — it names the earliest viable retry
  2. Check Poly-RateLimit-Remaining before large batches; split if the token cost exceeds your balance
  3. Never retry a 4xx blindly — 400s are request errors, not throttles
  4. Prefer WebSocket streams for books and fills; polling burns budget
  5. Watch Poly-RateLimit-Reset — it’s when enough tokens exist for your failed request, not when the bucket is full

What’s the practical budget for a normal bot?

A single-signer bot on Standard tier doing discovery + signal + execution:

Action Cost per cycle At 1 cycle/s
1 Gamma market fetch 1 (of 500/10s) negligible
1 book snapshot (WebSocket-fed) 0 0
1-3 order operations 1-3 tokens well under 40/s

The limits are generous for well-designed bots; they punish polling loops and batch-spam, not strategy complexity.

FAQ

Q: What happens when I exceed a Polymarket rate limit? A: Cloudflare throttling delays or queues over-limit requests; genuine overruns return 429 with Retry-After. Per-signer trading buckets reject with 429 once enforcement is live.

Q: Are rate limits per IP or per account? A: Both, separately: Cloudflare limits are per IP; CLOB order/cancel buckets are per signer address. Two bots behind one IP share the IP budget; one signer’s trading doesn’t touch another signer’s bucket.

Q: How do I get a higher trading tier? A: Trade more — tiers follow your maker wallet’s trailing 30-day volume, refreshed every 3 hours. Volume on the maker wallet counts even when the signer differs.

Q: Can a batch order fail partially? A: Under live enforcement the rate-limit check is all-or-nothing (whole batch or none), but an admitted batch retains normal per-order responses — individual orders inside can still fail for other reasons.

Q: What is Poly-RateLimit-Warning? A: A header from the warning-mode period before live per-signer enforcement — it flags requests that would have been rejected. Treat it as a free dress rehearsal.

Sources

Disclaimer

Not financial advice. Educational purposes only. Updated October 2026.