{"slug":"pm-rate-limits","title":"Prediction market API rate limits, tested with a daily ramp","subtitle":"Warm latency on book, price and list endpoints of five prediction market venue APIs, plus a daily rate limit ramp that records added latency and throttle onset per request tier.","category":"Trading","metric":"Warm book latency","unit":"ms","status":"live","higherIsBetter":false,"value":103.264,"leader":{"name":"Manifold","slug":"manifold","value":103.264},"rankings":[{"name":"Manifold","slug":"manifold","ms":{"p50":103.264,"p90":249.629,"p99":1283.4,"mean":133.575},"successRate":99.9487,"sampleSize":37018.4},{"name":"Polymarket","slug":"polymarket","ms":{"p50":113.074,"p90":221.034,"p99":247.988,"mean":107.449},"successRate":100,"sampleSize":51834},{"name":"Kalshi","slug":"kalshi","ms":{"p50":121.148,"p90":366.564,"p99":544.366,"mean":157.317},"successRate":99.9981,"sampleSize":51831},{"name":"Limitless","slug":"limitless","ms":{"p50":195.284,"p90":377.969,"p99":1120.25,"mean":211.913},"successRate":99.9672,"sampleSize":51824},{"name":"Myriad","slug":"myriad","ms":{"p50":247.889,"p90":1388.03,"p99":2365.53,"mean":589.888},"successRate":97.56240000000001,"sampleSize":51784.1}],"sparkline":[108.333,106.72,104.918,89.2857,94.375,91.8919,101.809,102.381,107.278,106.845,105.09,102.299,105.214,106.599,109.744,108.567,108.626,105.857,99.0385,85.9375,84.8214,91.875,100.146,103.723,103.947,105.625,105.612,104.079,101.471,96.3816,90,85.3933,81.4773,81.3073,82.702,86.1702,87.987,87.7273,89.2442,86.3636,86.4362,84.5745,89.3382,96.5909,91.875,81.9767,81.7797,88.4804,100.444,104.054,103.108,95.3125,93.5811,84.3023,88.6719,92.5,100.14,87.5,83.4134,84.1667,99.6951,114.608,125.136,127.274,127.683,127.156,128.906,131.283,132.384,131.092,129.388,129.712,128.397],"sampleSize":244291.5,"asOf":"2026-06-16T15:37:31.343Z","headline":"Manifold leads warm book latency at 103 ms (p50, 24h) on Prediction market API rate limits, tested with a daily ramp.","quote":"Manifold leads warm book latency at 103 ms (p50, 24h) on Prediction market API rate limits, tested with a daily ramp. Source: OpenChainBench (https://openchainbench.com/benchmarks/pm-rate-limits).","pageUrl":"https://openchainbench.com/benchmarks/pm-rate-limits","ogImage":"https://openchainbench.com/api/og/pm-rate-limits","source":"https://github.com/MobulaFi/mobula-monorepo/tree/main/miniapps/pm-rate-limits","methodology":["Endpoint classes per venue. Polymarket: CLOB `/book`, `/midpoint`, Gamma `/markets`. Kalshi: `/markets/{ticker}/orderbook`, `/markets/{ticker}`, `/markets`. Limitless: `/markets/{slug}/orderbook`, `/markets/{slug}`, `/markets/active`. Manifold: `/v0/bets`, `/v0/market/{id}`, `/v0/markets`. Myriad: `/markets/{slug}`, `/markets`. Myriad exposes no order book endpoint; that absence is reported, not worked around.","Pinned market per venue: most liquid, near the money (price between 0.15 and 0.85), expiring more than 24h out. Re pinned daily at 00:00 UTC and immediately on probe_invalid. A degenerate 0.99 book has a latency profile that does not represent real usage.","Warm probes every 5s (7s on Manifold, whose entire API sits behind max-age=5 plus stale-while-revalidate=10; tighter spacing would only measure the cache). Cold connect probe once per minute with keep alives disabled, TCP plus TLS handshake recorded separately.","Every sample records a cache flag from cf-cache-status, x-cache and age headers. Kalshi's market list is served from CloudFront with max-age=15, so its list latency measures the edge, not the API. Edge served samples (cache=hit) are excluded from every latency aggregate and reported through the cache label, so no venue ranks on its CDN.","Outcome classification: ok, timeout (8s), http_4xx, http_5xx, throttled (429), probe_invalid, net_error. Latency aggregates include successful requests only; failures count toward the success rate. probe_invalid covers stale pins, e.g. Limitless serves a CDN cached 400 for four hours once a market expires. Those are our fault, never the venue's.","Daily ramp: 60s per tier at rising requests per 10s window against the book endpoint, one venue at a time, one region at a time on disjoint UTC hours (02:00 us-east, 04:00 eu-west, 06:00 sgp).","Ramp tier clamps: Polymarket and Kalshi 25/50/100 per 10s (at most 7 percent of Polymarket's documented 1500 per 10s book budget), Manifold 15/30/60 (500 req/min per IP documented), Limitless 10/20/40 (limits undocumented, so conservative). Kalshi stops at the first 429 since its token bucket is documented. Myriad is excluded: its keyless budget is 30 req per 10s and ramping it would only measure our own quota.","Ramp abort guard: the run stops the moment throttled plus 5xx responses exceed 1 percent of any 10 second window. The headline ramp metric is p50 latency during the tier minus the warm baseline p50 of the previous hour in the same region, because venues behind Cloudflare queue bursts without ever returning 429, and added latency is the only honest throttle signal there.","WebSocket panel covers venues with a public market WebSocket, which today means Polymarket only. Kalshi requires authentication for WS, Manifold and Myriad have none, Limitless uses socket.io. Absence is shown, not penalized.","Myriad's origin is a single region US East deployment behind Heroku. Latency from eu-west and sgp is geography, reported as measured.","All probes hit documented public developer APIs with the identifying User-Agent `OpenChainBench/1.0 (+https://openchainbench.com/methodology; contact@mobula.io)`. We publish latency measurements only, never order book contents or prices, in line with venue data redistribution terms (Kalshi's in particular, applied to all venues equally).","Regions: us-east, eu-west, sgp (Railway). Histogram buckets 25ms to 10s."],"license":"CC-BY-4.0"}