Tutti gli articoli
Riferimento APIAPI di PolymarketRate limitCLOB

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.

11 min di letturaAggiornato il 24 settembre 2026

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 CloudflareToken bucket per signer
AmbitoIl tuo indirizzo IPIl tuo indirizzo signer
Si applica aOgni API ed endpointSolo richieste di ordine e cancellazione del CLOB
MeccanismoFinestra mobileToken bucket (velocità di ricarica + burst)
Oltre il limiteLe richieste vengono rallentate: ritardate e messe in codaLa richiesta viene rifiutata con 429
Varia in base aEndpointIl tuo livello di volume di trading a 30 giorni
I due limitatori si sommano. I bot che leggono molto di solito incontrano solo il primo; i bot di trading li incontrano entrambi.

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.

EndpointLimiteAl secondo
Generale4,000 req / 10s400 rps
/events500 req / 10s50 rps
/markets300 req / 10s30 rps
Elenco /markets + /events900 req / 10s90 rps
/comments200 req / 10s20 rps
/tags200 req / 10s20 rps
/public-search350 req / 10s35 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.

EndpointLimiteAl secondo
Generale1,000 req / 10s100 rps
/trades200 req / 10s20 rps
/positions150 req / 10s15 rps
/closed-positions150 req / 10s15 rps
Health check (/ok)100 req / 10s10 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.

EndpointLimiteAl secondo
Generale (tutti gli endpoint /v2)800 req / 10s80 rps
/v2/trades300 req / 10s30 rps
/v2/positions, /v2/positions/combos200 req / 10s20 rps
/v2/activity, /v2/activity/combos200 req / 10s20 rps
/v2/prices-history200 req / 10s20 rps
/v2/status100 req / 10s10 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

EndpointLimiteAl secondo
Generale9,000 req / 10s900 rps
GET balance allowance200 req / 10s20 rps
UPDATE balance allowance50 req / 10s5 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.

EndpointLimiteAl secondo
/book1,500 req / 10s150 rps
/books500 req / 10s50 rps
/price1,500 req / 10s150 rps
/prices500 req / 10s50 rps
/midpoint1,500 req / 10s150 rps
/midpoints500 req / 10s50 rps
/prices-history1,000 req / 10s100 rps
Tick size del mercato200 req / 10s20 rps

Registro

EndpointLimiteAl secondo
/trades, /orders, /notifications, /order900 req / 10s90 rps
/data/orders500 req / 10s50 rps
/data/trades500 req / 10s50 rps
/notifications125 req / 10s12.5 rps

Autenticazione

EndpointLimiteAl secondo
Endpoint delle chiavi API100 req / 10s10 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.

EndpointBurstSostenuto
POST /order5,000 req / 10s120,000 req / 10 min
DELETE /order5,000 req / 10s120,000 req / 10 min
POST /orders2,000 req / 10s21,000 req / 10 min
DELETE /orders2,000 req / 10s15,000 req / 10 min
DELETE /cancel-all250 req / 10s6,000 req / 10 min
DELETE /cancel-market-orders1,500 req / 10s21,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

EndpointLimite
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 /submit25 req / 1 min
API del PNL utente200 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:

BucketRichiestaCosto in token
OrdiniPOST /order1
OrdiniPOST /ordersNumero di ordini nel batch
CancellazioniDELETE /order1
CancellazioniDELETE /ordersNumero di ID ordine inviati
CancellazioniDELETE /cancel-all1 + numero di ordini effettivamente cancellati
CancellazioniDELETE /cancel-market-orders1 + 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.

LivelloVolume a 30 giorniOrdini/sBurst ordiniCancellazioni/sBurst cancellazioni
Standard—406080120
Copper$30,000+6090120180
Bronze$50,000+80120160240
Silver$100,000+200300400600
Gold$500,000+4006008001,200
Platinum$2.5M+4506759001,350
Diamond$5M+5257871,0501,575
Elite$10M+6009001,2001,800
I livelli Standard, Copper, Bronze, Silver e Gold consentono un saldo di cancellazioni negativo; Platinum, Diamond ed Elite lo fermano a zero.

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.

HeaderSignificato
Poly-RateLimit-RemainingSaldo di token nel bucket pertinente dopo questa richiesta
Poly-RateLimit-ResetTimestamp Unix in cui termina il periodo di attesa corrente
Poly-RateLimit-TierQuale livello è stato applicato
Retry-AfterRitardo prima di riprovare, in secondi: solo sulle risposte 429
Poly-RateLimit-Warningtrue 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 /books invece di cinquanta chiamate /book ti 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 /markets cambiano pochissimo durante la vita di un mercato, ma /markets ha 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 /book a 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-Remaining non 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.

PianoRichieste / minBurst / secStorico
Free302Mercati recenti
Builder2501214 giorni
Pro75040Storico completo
EnterprisePersonalizzatoPersonalizzatoStorico completo + esportazione in blocco
I limiti di PolyTest, per confronto. Controlla i tuoi in modo programmatico con 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