Polymarket API Rate Limits: What They Are, Why You Hit Them, and How to Design Around Them
A bot that works in testing and dies in production almost always died here: rate limits. The API budgets requests per endpoint per window; burst patterns — polling loops, fan-out queries, reconnect storms — burn the budget and get throttled at the worst moment, mid-strategy with open positions. Here’s what the limits protect, how to know you’re hitting them, and the four design patterns that make them irrelevant.
What are Polymarket’s API rate limits?
Per-endpoint request budgets over rolling windows, enforced server-side: when you exceed the budget for an endpoint, further requests get rejected (HTTP 429) until the window rolls. Limits differ by endpoint class — market data tolerates more than order placement; authenticated trading endpoints budget more strictly because they touch the matching engine. Exact current numbers live in the official docs (they tune them) — the API guide covers endpoint classes, and rate-limit budgets for bots tracks the operational numbers.
Why you’re hitting them (the four burst patterns)
- Polling loops on REST. Snapshotting books every second across dozens of markets. Fix: WebSockets for anything you poll faster than every 10 seconds — see the websocket guide.
- Fan-out queries. One strategy decision triggering 30 book requests synchronously. Fix: cache + batch (below).
- Reconnect storms. Your websocket drops, your retry loop reconnects 40 times in a minute, then the REST resync hammers the API. Fix: exponential backoff with jitter, one resync after stability.
- Idle-time scanning. A market scanner crawling every instrument on a schedule designed for humans, not machines. Fix: incremental scans (changed-markets-only).
The four design patterns that make limits irrelevant
Pattern 1: stream, don’t poll. WebSocket subscriptions for books and trades on markets you trade; REST only for discovery and snapshots of markets you might trade. This alone removes 80%+ of request volume.
Pattern 2: cache with TTLs. Instrument metadata and market listings change slowly — cache them for minutes, not seconds. Request budget is for things that change: books, positions, fills.
Pattern 3: budget per endpoint class. Track your own request rate per class and self-throttle at 70% of budget. When a strategy wants to exceed it, it queues rather than fires — a queued request is free; a 429 mid-fill is not. The 8-component architecture puts this in the risk layer.
Pattern 4: degrade, don’t die. On 429: exponential backoff with jitter, resume from cached state, and never retry storm the same endpoint. A bot that survives a throttle with stale-but-labeled data beats one that crashes with live positions.
Detecting and recovering from a 429
The response says what happened — read it, don’t swallow it. Log the endpoint, the timestamp, and your request rate at that moment; three 429s on the same endpoint in a day means your budget design is wrong, not your luck. Recovery: backoff, resume, then fix the pattern — see the deployment checklist for the operational loop.
FAQ
Does the Polymarket API have rate limits? Yes — per-endpoint budgets over rolling windows, stricter on authenticated trading endpoints than public market data. Exceeding them returns HTTP 429 until the window rolls. Current numbers are in the official docs.
Why does my bot get 429 errors only during volatility? Volatility triggers your burst patterns: strategy fan-out, resyncs after websocket drops, and scanner loops all fire simultaneously exactly when everyone else’s do — the shared budget is scarcest when you need it most, which is why stream-don’t-poll matters.
How do I check my API request rate? Track it in your own client — count requests per endpoint class per window and log it. Self-throttling at 70% of budget keeps you under the server’s line; the server won’t warn you before you cross it.
Do WebSockets count against rate limits? No — subscriptions are push, not requests. Moving from REST polling to websocket streams is the single biggest rate-limit fix for most bots: see the websocket guide.
What’s the right response to a 429? Exponential backoff with jitter, resume from cached state, log the endpoint and your rate, and fix the burst pattern that caused it — retry storms convert one 429 into a ban-shaped problem. See authentication and errors for the error-handling layer.
Educational content, not financial advice. Not affiliated with Polymarket. Last updated October 2026.