Rate limit dell’API di Polymarket: il riferimento completo
Polymarket pubblica i suoi rate limit su diverse pagine, in due sistemi completamente diversi, usando una finestra di 10 secondi che quasi nessuno si aspetta. Qui c’è tutto in un unico set di tabelle, più cosa succede davvero quando superi un limite.
Se hai mai provato a rispondere a una domanda semplice (quante richieste al secondo posso inviare a Polymarket?), avrai scoperto che non c’è una risposta semplice. I limiti sono distribuiti su due sistemi separati, pubblicati su pagine diverse ed espressi in una finestra di 10 secondi invece che nei valori al secondo o al minuto usati dalla maggior parte delle API.
Per il limite di una rotta specifica, ogni endpoint ha anche una pagina dedicata nel riferimento all’API di Polymarket.
Questa pagina raccoglie ogni limite documentato in un solo posto, spiega i due sistemi e mostra cosa succede davvero quando superi una soglia. Tutti i valori vengono dalla documentazione ufficiale di Polymarket e sono aggiornati a settembre 2026.
La risposta breve
Dividi per 10. Un limite di 1,500 req / 10s corrisponde a 150 richieste al secondo. Il tetto globale di Polymarket è 15,000 req / 10s (1,500 rps), ma ogni famiglia di endpoint ha un limite molto più basso, ed è il limite dell’endpoint quello che ti fermerà.
Due sistemi di rate limit diversi
È la parte che coglie impreparata la maggior parte degli sviluppatori. Polymarket usa due limitatori indipendenti, e stare sotto uno non ti protegge dall’altro.
| Limiti per IP di Cloudflare | Token bucket per signer | |
|---|---|---|
| Ambito | Il tuo indirizzo IP | Il tuo indirizzo signer |
| Si applica a | Ogni API ed endpoint | Solo richieste di ordine e cancellazione del CLOB |
| Meccanismo | Finestra mobile | Token bucket (velocità di ricarica + burst) |
| Oltre il limite | Le richieste vengono rallentate: ritardate e messe in coda | La richiesta viene rifiutata con 429 |
| Varia in base a | Endpoint | Il tuo livello di volume di trading a 30 giorni |
Rallentate, non rifiutate
È la cosa più utile da capire sul livello Cloudflare. Quando superi un limite basato sull’IP, Polymarket ritarda e mette in coda le tue richieste invece di rifiutarle subito. Non vedrai una raffica di 429: vedrai la tua latenza salire in silenzio. Un bot che sembra sano ma è passato da 40ms a 3s di tempo di risposta di solito è un bot oltre il suo rate limit.
Rate limit dell’API Gamma
URL di base https://gamma-api.polymarket.com. Gamma fornisce i metadati di mercati ed eventi, gli endpoint che la maggior parte delle persone usa per primi quando esplora la piattaforma.
| Endpoint | Limite | Al secondo |
|---|---|---|
| Generale | 4,000 req / 10s | 400 rps |
/events | 500 req / 10s | 50 rps |
/markets | 300 req / 10s | 30 rps |
Elenco /markets + /events | 900 req / 10s | 90 rps |
/comments | 200 req / 10s | 20 rps |
/tags | 200 req / 10s | 20 rps |
/public-search | 350 req / 10s | 35 rps |
/markets è il limite più stretto che incontrerai
Con 300 req / 10s, /markets è l’endpoint di uso comune più restrittivo dell’intera piattaforma, 13 volte più stretto del limite generale di Gamma che gli sta sopra. Se stai paginando l’intero elenco dei mercati in un loop, è la prima cosa che si rompe.
Rate limit della Data API
URL di base https://data-api.polymarket.com. Posizioni, storico dei trade e dati del portafoglio. Nota quanto questa API sia più stretta di Gamma o CLOB: il limite generale è di 1,000 req / 10s, un quarto di quello di Gamma.
| Endpoint | Limite | Al secondo |
|---|---|---|
| Generale | 1,000 req / 10s | 100 rps |
/trades | 200 req / 10s | 20 rps |
/positions | 150 req / 10s | 15 rps |
/closed-positions | 150 req / 10s | 15 rps |
Health check (/ok) | 100 req / 10s | 10 rps |
Data API v2
La Data API v2 è stata rilasciata il 4 settembre 2026 su https://data-api.polymarket.com/v2 con limiti propri. La v1 funziona ancora ma è congelata: i nuovi endpoint e campi arrivano solo sulla v2.
| Endpoint | Limite | Al secondo |
|---|---|---|
Generale (tutti gli endpoint /v2) | 800 req / 10s | 80 rps |
/v2/trades | 300 req / 10s | 30 rps |
/v2/positions, /v2/positions/combos | 200 req / 10s | 20 rps |
/v2/activity, /v2/activity/combos | 200 req / 10s | 20 rps |
/v2/prices-history | 200 req / 10s | 20 rps |
/v2/status | 100 req / 10s | 10 rps |
Lo storico dei prezzi ha cambiato host ed è diventato 5 volte più stretto
GET /v2/prices-history sull’host data sostituisce la rotta ospitata sul CLOB. La versione CLOB consentiva 1,000 req / 10s; la rotta v2 ne consente 200. Se porti la chiamata senza portare anche il ritmo, raggiungi il tetto cinque volte prima. La v2 segnala inoltre il carico con 429 più Retry-After e pagina con cursori opachi: non esiste offset.
Rate limit dell’API CLOB
URL di base https://clob.polymarket.com. L’order book vero e proprio. Il CLOB ha il limite generale più alto di tutte le API di Polymarket (9,000 req / 10s), ma si divide in quattro gruppi distinti con limiti molto diversi.
Generale
| Endpoint | Limite | Al secondo |
|---|---|---|
| Generale | 9,000 req / 10s | 900 rps |
GET balance allowance | 200 req / 10s | 20 rps |
UPDATE balance allowance | 50 req / 10s | 5 rps |
Dati di mercato
Lo schema da notare: gli endpoint al singolare hanno 1,500 req / 10s, quelli batch al plurale 500 req / 10s. Sembra un peggioramento finché non ricordi che una chiamata batch copre molti token. Il batching costa un terzo per richiesta ma ogni chiamata fa molto più lavoro: preferisci sempre /books a un loop di /book.
| Endpoint | Limite | Al secondo |
|---|---|---|
/book | 1,500 req / 10s | 150 rps |
/books | 500 req / 10s | 50 rps |
/price | 1,500 req / 10s | 150 rps |
/prices | 500 req / 10s | 50 rps |
/midpoint | 1,500 req / 10s | 150 rps |
/midpoints | 500 req / 10s | 50 rps |
/prices-history | 1,000 req / 10s | 100 rps |
| Tick size del mercato | 200 req / 10s | 20 rps |
Registro
| Endpoint | Limite | Al secondo |
|---|---|---|
/trades, /orders, /notifications, /order | 900 req / 10s | 90 rps |
/data/orders | 500 req / 10s | 50 rps |
/data/trades | 500 req / 10s | 50 rps |
/notifications | 125 req / 10s | 12.5 rps |
Autenticazione
| Endpoint | Limite | Al secondo |
|---|---|---|
| Endpoint delle chiavi API | 100 req / 10s | 10 rps |
Trading: burst e sostenuto
Gli endpoint di trading sono gli unici con due limiti Cloudflare: un limite di burst per i picchi brevi e un limite sostenuto misurato su 10 minuti. Devi restare sotto entrambi.
| Endpoint | Burst | Sostenuto |
|---|---|---|
POST /order | 5,000 req / 10s | 120,000 req / 10 min |
DELETE /order | 5,000 req / 10s | 120,000 req / 10 min |
POST /orders | 2,000 req / 10s | 21,000 req / 10 min |
DELETE /orders | 2,000 req / 10s | 15,000 req / 10 min |
DELETE /cancel-all | 250 req / 10s | 6,000 req / 10 min |
DELETE /cancel-market-orders | 1,500 req / 10s | 21,000 req / 10 min |
DELETE /cancel-all a 250 req / 10s merita una segnalazione. I market maker che fanno cancel-all a ogni ciclo di ri-quotazione lo esauriscono in fretta, e il limite sostenuto di 6,000 ogni 10 minuti corrisponde in media a soli 10 cancel-all al secondo.
Bridge, Relayer e tutto il resto
| Endpoint | Limite |
|---|---|
| Rate limiting generale (tetto globale) | 15,000 req / 10s |
Health check (/ok) | 100 req / 10s |
Bridge API (https://bridge.polymarket.com) | 50 req / 10s |
Relayer /submit | 25 req / 1 min |
| API del PNL utente | 200 req / 10s |
Il limite del Relayer è l’eccezione
Relayer /submit è l’unico limite documentato misurato al minuto invece che ogni 10 secondi, e con 25 req/min è di gran lunga il valore più stretto della piattaforma. Se invii transazioni tramite il relayer, si tratta più o meno di un invio ogni 2.4 secondi.
Token bucket per signer (trading sul CLOB)
Separatamente da Cloudflare, Polymarket valuta le richieste di ordine e cancellazione del CLOB rispetto a token bucket per signer. Ogni indirizzo signer ha un bucket per gli ordini e uno per le cancellazioni; consumare dall’uno non influisce sull’altro. A differenza del livello Cloudflare, superarli restituisce un vero 429.
Le richieste costano token invece di contare come un’unità ciascuna:
| Bucket | Richiesta | Costo in token |
|---|---|---|
| Ordini | POST /order | 1 |
| Ordini | POST /orders | Numero di ordini nel batch |
| Cancellazioni | DELETE /order | 1 |
| Cancellazioni | DELETE /orders | Numero di ID ordine inviati |
| Cancellazioni | DELETE /cancel-all | 1 + numero di ordini effettivamente cancellati |
| Cancellazioni | DELETE /cancel-market-orders | 1 + numero di ordini corrispondenti cancellati |
I batch sono tutto o niente
Un batch viene ammesso solo quando il bucket contiene abbastanza token per ogni voce. Altrimenti l’intera richiesta viene rifiutata e non viene elaborato nulla. Un batch il cui costo in token supera la capacità di burst del tuo livello non può mai essere ammesso, per quanto tu aspetti: va diviso.
Livelli di volume
La dimensione del tuo bucket dipende dal volume cumulativo del wallet maker su una finestra mobile di 30 giorni. L’assegnazione dei livelli si aggiorna ogni tre ore.
| Livello | Volume a 30 giorni | Ordini/s | Burst ordini | Cancellazioni/s | Burst cancellazioni |
|---|---|---|---|---|---|
| Standard | — | 40 | 60 | 80 | 120 |
| Copper | $30,000+ | 60 | 90 | 120 | 180 |
| Bronze | $50,000+ | 80 | 120 | 160 | 240 |
| Silver | $100,000+ | 200 | 300 | 400 | 600 |
| Gold | $500,000+ | 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 |
Calcola quanto dura un burst completo con burst_seconds = burst / rate_per_sec. Per un signer Standard è 60 / 40: 1.5 secondi di invio di ordini alla massima velocità prima di essere limitato alla velocità di ricarica di 40/s.
Leggere gli header del rate limit
Il limitatore per signer restituisce degli header su ogni richiesta valutata. Sono il modo più economico possibile per monitorare il tuo budget, senza bisogno di chiamate API aggiuntive.
| Header | Significato |
|---|---|
Poly-RateLimit-Remaining | Saldo di token nel bucket pertinente dopo questa richiesta |
Poly-RateLimit-Reset | Timestamp Unix in cui termina il periodo di attesa corrente |
Poly-RateLimit-Tier | Quale livello è stato applicato |
Retry-After | Ritardo prima di riprovare, in secondi: solo sulle risposte 429 |
Poly-RateLimit-Warning | true quando l’applicazione effettiva dei limiti avrebbe rifiutato la richiesta |
Poly-RateLimit-Reset non è il momento in cui il bucket è pieno
Su un 429, ti dice quando ci saranno abbastanza token per la richiesta che hai appena tentato, non quando il bucket sarà pieno. Di solito non devi aspettare quanto pensi. E Poly-RateLimit-Remaining può diventare negativo dopo un cancel-all sui livelli che consentono un saldo di cancellazioni negativo.
Gestire correttamente i 429
La strategia di retry corretta cambia a seconda del limitatore che hai incontrato, e sbagliarla peggiora le cose. Rispetta Retry-After quando è presente; quando non c’è, ripiega su un backoff esponenziale con jitter. Il jitter conta: senza, ognuno dei tuoi worker riprova nello stesso istante e fai scattare di nuovo il limite immediatamente.
const MAX_RETRIES = 5;
async function polyFetch(url: string, init?: RequestInit): Promise<Response> {
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
const res = await fetch(url, init);
// Watch the budget even on success — this is your early warning.
const remaining = res.headers.get("Poly-RateLimit-Remaining");
if (remaining !== null && Number(remaining) < 10) {
console.warn(`Low token budget: ${remaining} (tier ${res.headers.get("Poly-RateLimit-Tier")})`);
}
// Warning mode: not rejected yet, but it would have been.
if (res.headers.get("Poly-RateLimit-Warning") === "true") {
console.warn("Request would be rejected under live enforcement — slow down.");
}
if (res.status !== 429) return res;
if (attempt === MAX_RETRIES) return res;
// Prefer the server's own answer, else exponential backoff.
const retryAfter = res.headers.get("Retry-After");
const baseMs = retryAfter
? Number(retryAfter) * 1000
: Math.min(2 ** attempt * 250, 8000);
// Full jitter — spreads a fleet of workers out instead of resynchronising them.
await new Promise((r) => setTimeout(r, Math.random() * baseMs));
}
throw new Error("unreachable");
}Non ritentare invariato un batch troppo grande
Se un batch costa più token della capacità di burst del tuo livello, ritentare è inutile: non può mai essere ammesso come singola richiesta. Dividilo. È l’unico caso in cui il backoff andrà avanti all’infinito.
Restare sotto i limiti per progettazione
- Usa i batch invece dei loop. Una chiamata
/booksinvece di cinquanta chiamate/bookti costa una richiesta su un budget di 500 req/10s invece di cinquanta su un budget di 1,500 req/10s: un margine 17 volte migliore. - Metti in cache i metadati. I metadati dei mercati di
/marketscambiano pochissimo durante la vita di un mercato, ma/marketsha il limite Gamma più stretto, 300 req/10s. Scaricali una volta, mettili in cache e smetti di richiederli nel tuo ciclo critico. - Usa i WebSocket per lo stato live. Fare polling di
/booka intervalli regolari è il modo più comune di bruciare un budget di richieste. Iscriviti allo stream e lascia che sia il server a inviarti le modifiche. - Aggiungi jitter ai job schedulati. Se ogni worker si sveglia esattamente allo scoccare del minuto, crei un picco sincronizzato ben sopra la tua frequenza media. Randomizza gli offset di avvio.
- Guarda la latenza, non solo i tassi di errore. Poiché Cloudflare rallenta invece di rifiutare, l’aumento della latenza p99 è il tuo primo segnale di aver superato un limite per IP, molto prima che qualcosa compaia come errore.
- Tieni traccia degli header. Leggere
Poly-RateLimit-Remainingnon costa nulla e ti dice esattamente quanto budget ti resta.
I rate limit non sono la stessa cosa dell’accesso ai dati
Un’ultima cosa da chiarire in modo esplicito, perché è il malinteso più comune che vediamo: nessun livello di rate limit ti dà la profondità storica dell’order book. L’API di Polymarket fornisce lo stato attuale del book. Non espone un archivio storico di com’era il book alle 14:03:17 di martedì scorso, e una volta che un mercato si risolve il suo order book restituisce 404.
È una lacuna strutturale, non un problema di rallentamento, e nessuna logica di backoff la risolve. Se stai cercando di fare backtest di una strategia, ti servono snapshot point-in-time registrati da qualcuno all’epoca, ed è esattamente ciò per cui esiste PolyTest: 240M+ snapshot storici dei mercati crypto Up/Down di Polymarket con profondità completa dell’order book, risoluzione sotto il secondo e nessun buco.
| Piano | Richieste / min | Burst / sec | Storico |
|---|---|---|---|
| Free | 30 | 2 | Mercati recenti |
| Builder | 250 | 12 | 14 giorni |
| Pro | 750 | 40 | Storico completo |
| Enterprise | Personalizzato | Personalizzato | Storico completo + esportazione in blocco |
GET /api/v1/limits. Vedi rate limit e prezzi.Domande frequenti
- Qual è il rate limit dell’API di Polymarket in richieste al secondo?
- Polymarket pubblica i limiti per finestre di 10 secondi, quindi dividi per 10. Il tetto globale è 15,000 req / 10s (1,500 rps), ma i limiti per endpoint sono molto più bassi e sono quelli vincolanti: /book e /price del CLOB consentono 1,500 req / 10s (150 rps), l’endpoint /markets di Gamma solo 300 req / 10s (30 rps) e l’endpoint /positions della Data API 150 req / 10s (15 rps).
- Polymarket restituisce un 429 quando superi il rate limit?
- Dipende dal limitatore che incontri. I limiti per IP di Cloudflare rallentano le richieste (vengono ritardate e messe in coda invece di essere rifiutate), quindi vedi la latenza salire invece di errori. I token bucket per signer, separati, sugli endpoint di ordine e cancellazione del CLOB restituiscono invece 429 Too Many Requests, insieme a un header Retry-After che indica il ritardo minimo prima di riprovare.
- Quali sono i rate limit dell’API CLOB di Polymarket?
- Il limite generale del CLOB è di 9,000 req / 10s. Gli endpoint dei dati di mercato /book, /price e /midpoint consentono 1,500 req / 10s ciascuno, mentre i loro equivalenti batch /books, /prices e /midpoints consentono 500 req / 10s. Gli endpoint del registro consentono 900 req / 10s. Gli endpoint di trading hanno sia limiti di burst sia sostenuti: POST /order consente 5,000 req / 10s di burst e 120,000 req / 10 min sostenuti.
- Quali sono i rate limit dell’API Gamma di Polymarket?
- Il limite generale dell’API Gamma è di 4,000 req / 10s. I singoli endpoint sono più stretti: /events è a 500 req / 10s, /markets a 300 req / 10s, l’elenco combinato /markets + /events a 900 req / 10s, /public-search a 350 req / 10s, e /comments e /tags a 200 req / 10s ciascuno. Il limite di /markets è il più stretto tra quelli di uso comune sulla piattaforma.
- I rate limit di Polymarket sono per indirizzo IP o per chiave API?
- I limiti principali di Cloudflare sono per indirizzo IP, non per chiave API, quindi più chiavi dietro lo stesso IP condividono un unico budget. I limiti a token bucket separati sugli endpoint di ordine e cancellazione del CLOB sono legati al tuo indirizzo signer e dimensionati in base al livello di volume di trading a 30 giorni del tuo wallet maker.
- Posso ottenere dati storici dell’order book di Polymarket tramite l’API?
- No. L’API di Polymarket fornisce solo lo stato attuale del mercato. Non esiste un archivio storico della profondità dell’order book, e il book di un mercato risolto restituisce 404. Il backtesting richiede snapshot point-in-time registrati mentre i mercati erano attivi. PolyTest fornisce 240M+ snapshot di questo tipo per i mercati crypto Up/Down di Polymarket, con la profondità completa dell’order book a 8 livelli e risoluzione sotto il secondo.
Ottieni i dati storici che Polymarket non conserva
PolyTest registra i mercati crypto Up/Down di Polymarket mentre sono attivi: 240M+ snapshot con 8 livelli di profondità dell’order book, timestamp sotto il secondo e mercati risolti conservati. Inizia con una prova gratuita di 3 giorni.
Continua a leggere
WebSocket di Polymarket: dati in tempo reale che non cadono
Fare polling dell’order book è il modo più comune di bruciare un budget di rate limit senza alcun beneficio. Ecco i quattro stream, le opzioni di sottoscrizione che nessuno documenta e il guasto in cui il tuo bot riceve silenzio e lo scambia per calma.
Errori dell’API di Polymarket: ogni codice, decodificato
I messaggi di errore di Polymarket sono laconici, e quelli che rompono il tuo bot alle 3 di notte di solito mancano del tutto dalla documentazione. Ecco il riferimento completo: errori documentati, quelli non documentati e cosa fare davvero per ciascuno.
Come costruire un bot di trading per Polymarket
La maggior parte dei tutorial sui bot per Polymarket si basa su SDK che non esistono più. Questo è il percorso attuale dall’inizio alla fine: cosa installare nel 2026, come funziona davvero l’autenticazione, dove sono i buchi nei dati e i problemi che uccidono i bot nella prima settimana.