Limites de requisições da API da Polymarket: a referência completa
A Polymarket publica seus limites de requisições em várias páginas, em dois sistemas completamente diferentes, usando uma janela de 10 segundos que quase ninguém espera. Aqui está tudo em um só conjunto de tabelas — mais o que realmente acontece quando você passa de um limite.
Se você já tentou responder a uma pergunta simples — quantas requisições por segundo posso enviar para a Polymarket? —, deve ter descoberto que não há resposta simples. Os limites estão espalhados por dois sistemas separados, publicados em páginas diferentes e expressos em uma janela de 10 segundos, em vez dos números por segundo ou por minuto que a maioria das APIs usa.
Para o limite de uma rota específica, cada endpoint também tem sua própria página na referência da API da Polymarket.
Esta página reúne todos os limites documentados em um só lugar, explica os dois sistemas e mostra o que realmente acontece quando você passa da linha. Todos os números vêm da documentação oficial da Polymarket e estão atualizados até setembro de 2026.
A resposta curta
Divida por 10. Um limite de 1,500 req / 10s equivale a 150 requisições por segundo. O teto global da Polymarket é 15,000 req / 10s (1,500 rps), mas cada família de endpoints tem um limite bem menor abaixo dele, e o limite do endpoint é o que vai parar você.
Dois sistemas diferentes de limite de requisições
Esta é a parte que pega a maioria dos desenvolvedores. A Polymarket roda dois limitadores independentes, e estar abaixo de um não protege você do outro.
| Limites por IP da Cloudflare | Token buckets por signer | |
|---|---|---|
| Escopo | Seu endereço IP | Seu endereço de signer |
| Aplica-se a | Todas as APIs e endpoints | Apenas requisições de ordem + cancelamento do CLOB |
| Mecanismo | Janela deslizante | Token bucket (taxa de recarga + pico) |
| Acima do limite | As requisições são limitadas — atrasadas e colocadas em fila | A requisição é rejeitada com 429 |
| Varia por | Endpoint | Seu nível de volume de trading de 30 dias |
Atrasado, não rejeitado
Esta é a coisa mais útil para entender sobre a camada da Cloudflare. Quando você excede um limite por IP, a Polymarket atrasa e coloca em fila suas requisições em vez de rejeitá-las de cara. Você não vai ver uma rajada de 429 — vai ver sua latência subir em silêncio. Um bot que parece saudável, mas foi de 40ms para 3s de tempo de resposta, geralmente é um bot acima do limite de requisições.
Limites da API Gamma
URL base https://gamma-api.polymarket.com. A Gamma serve os metadados de mercados e eventos — os endpoints que a maioria das pessoas acessa primeiro ao explorar a plataforma.
| Endpoint | Limite | Por segundo |
|---|---|---|
| Geral | 4,000 req / 10s | 400 rps |
/events | 500 req / 10s | 50 rps |
/markets | 300 req / 10s | 30 rps |
Listagem /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 é o limite mais apertado que você vai encontrar
Com 300 req / 10s, /markets é o endpoint de uso comum mais restritivo de toda a plataforma — 13× mais apertado do que o limite geral da Gamma acima dele. Se você está paginando a lista completa de mercados em um loop, é isso que quebra primeiro.
Limites da Data API
URL base https://data-api.polymarket.com. Posições, histórico de negociações e dados de portfólio. Note quanto esta API é mais apertada do que a Gamma ou o CLOB — o limite geral é de 1,000 req / 10s, um quarto do da Gamma.
| Endpoint | Limite | Por segundo |
|---|---|---|
| Geral | 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
A Data API v2 foi lançada em 4 de setembro de 2026 em https://data-api.polymarket.com/v2, com seus próprios limites. A v1 continua no ar, mas está congelada — novos endpoints e campos só chegam na v2.
| Endpoint | Limite | Por segundo |
|---|---|---|
Geral (todos os endpoints /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 |
O histórico de preços mudou de host e ficou 5x mais apertado
GET /v2/prices-history no host data substitui a rota hospedada no CLOB. A versão do CLOB permitia 1,000 req / 10s; a rota v2 permite 200. Migre a chamada sem migrar o ritmo e você bate no teto cinco vezes mais cedo. A v2 também sinaliza carga com 429 mais Retry-After e pagina com cursores opacos — não existe offset.
Limites da API CLOB
URL base https://clob.polymarket.com. O livro de ofertas em si. O CLOB tem a maior cota geral de todas as APIs da Polymarket (9,000 req / 10s), mas se divide em quatro grupos distintos, com limites muito diferentes.
Geral
| Endpoint | Limite | Por segundo |
|---|---|---|
| Geral | 9,000 req / 10s | 900 rps |
GET de allowance de saldo | 200 req / 10s | 20 rps |
UPDATE de allowance de saldo | 50 req / 10s | 5 rps |
Dados de mercado
O padrão a notar aqui: os endpoints no singular têm 1,500 req / 10s, os endpoints de lote no plural têm 500 req / 10s. Parece um rebaixamento até você lembrar que uma chamada em lote cobre muitos tokens. O lote custa 3× menos por requisição, mas cada chamada faz muito mais trabalho — prefira sempre /books a um loop de /book.
| Endpoint | Limite | Por segundo |
|---|---|---|
/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 do mercado | 200 req / 10s | 20 rps |
Registro
| Endpoint | Limite | Por segundo |
|---|---|---|
/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 |
Autenticação
| Endpoint | Limite | Por segundo |
|---|---|---|
| Endpoints de chave de API | 100 req / 10s | 10 rps |
Trading — pico e sustentado
Os endpoints de trading são os únicos com dois limites da Cloudflare: um limite de pico para picos curtos e um limite sustentado medido ao longo de 10 minutos. Você precisa ficar abaixo dos dois.
| Endpoint | Pico | Sustentado |
|---|---|---|
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 |
Vale destacar o DELETE /cancel-all com 250 req / 10s. Market makers que fazem cancel-all a cada ciclo de recotação esgotam esse limite rapidamente, e o limite sustentado de 6,000 a cada 10 minutos dá, em média, só 10 chamadas de cancel-all por segundo.
Bridge, Relayer e todo o resto
| Endpoint | Limite |
|---|---|
| Limitação geral de requisições (teto global) | 15,000 req / 10s |
Health check (/ok) | 100 req / 10s |
API Bridge (https://bridge.polymarket.com) | 50 req / 10s |
Relayer /submit | 25 req / 1 min |
| API de PNL do usuário | 200 req / 10s |
O limite do Relayer é o ponto fora da curva
O /submit do Relayer é o único limite documentado medido por minuto em vez de a cada 10 segundos, e com 25 req/min é de longe o número mais apertado da plataforma. Se você envia transações pelo relayer, isso dá mais ou menos um envio a cada 2.4 segundos.
Token buckets por signer (trading no CLOB)
Separadamente da Cloudflare, a Polymarket avalia as requisições de ordem e cancelamento do CLOB com token buckets por signer. Cada endereço de signer tem um bucket de ordens e um bucket de cancelamentos; gastar de um não afeta o outro. Diferentemente da camada da Cloudflare, exceder esses limites retorna um 429 de verdade.
As requisições custam tokens, em vez de contarem como uma unidade cada:
| Bucket | Requisição | Custo em tokens |
|---|---|---|
| Ordens | POST /order | 1 |
| Ordens | POST /orders | Número de ordens no lote |
| Cancelamentos | DELETE /order | 1 |
| Cancelamentos | DELETE /orders | Número de IDs de ordens enviados |
| Cancelamentos | DELETE /cancel-all | 1 + número de ordens efetivamente canceladas |
| Cancelamentos | DELETE /cancel-market-orders | 1 + número de ordens correspondentes canceladas |
Os lotes são tudo ou nada
Um lote só é aceito quando o bucket tem tokens suficientes para todas as entradas. Caso contrário, a requisição inteira é rejeitada e nada é processado. Um lote cujo custo em tokens excede a capacidade de pico do seu nível nunca pode ser aceito, não importa quanto você espere — ele precisa ser dividido.
Níveis de volume
O tamanho do seu bucket depende do volume acumulado da carteira maker em uma janela móvel de 30 dias. A atribuição de nível é atualizada a cada três horas.
| Nível | Volume de 30 dias | Ordens/s | Pico de ordens | Cancelamentos/s | Pico de cancelamentos |
|---|---|---|---|---|---|
| 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 |
Calcule quanto dura um pico completo com burst_seconds = burst / rate_per_sec. Para um signer Standard, isso dá 60 / 40 — 1.5 segundo de envio de ordens a toda velocidade antes de você ficar limitado à taxa de recarga de 40/s.
Lendo os headers de limite de requisições
O limitador por signer retorna headers em toda requisição avaliada. Eles são a forma mais barata possível de monitorar seu orçamento — nenhuma chamada extra à API é necessária.
| Header | Significado |
|---|---|
Poly-RateLimit-Remaining | Saldo de tokens no bucket aplicável depois desta requisição |
Poly-RateLimit-Reset | Timestamp Unix em que termina o período de espera atual |
Poly-RateLimit-Tier | Qual nível foi aplicado |
Retry-After | Atraso para nova tentativa em segundos — só em respostas 429 |
Poly-RateLimit-Warning | true quando a aplicação real dos limites teria rejeitado a requisição |
Poly-RateLimit-Reset não é o momento em que o bucket se recarrega por completo
Em um 429, ele diz quando haverá tokens suficientes para a requisição que você acabou de tentar — não quando o bucket estará cheio. Normalmente você não precisa esperar tanto quanto acha. E Poly-RateLimit-Remaining pode ficar negativo depois de um cancel-all nos níveis que permitem saldo de cancelamentos negativo.
Tratando os 429 corretamente
A estratégia certa de nova tentativa muda conforme o limitador que você atingiu, e errar piora as coisas. Respeite o Retry-After quando ele estiver presente; recorra ao backoff exponencial com jitter quando não estiver. O jitter importa: sem ele, todos os seus workers tentam de novo no mesmo instante e você dispara o limite de novo na hora.
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");
}Não tente de novo um lote grande demais sem alterá-lo
Se um lote custa mais tokens do que a capacidade de pico do seu nível, tentar de novo é inútil — ele nunca vai ser aceito como uma única requisição. Divida-o. Este é o único caso em que o backoff fica em loop para sempre.
Ficando abaixo dos limites por design
- Use lotes em vez de loops. Uma chamada a
/booksem vez de cinquenta chamadas a/bookcusta uma requisição contra um orçamento de 500 req/10s, em vez de cinquenta contra um de 1,500 req/10s — uma folga 17× maior. - Guarde os metadados em cache. Os metadados de mercado de
/marketsquase não mudam durante a vida de um mercado, mas/marketstem o limite mais apertado da Gamma, 300 req/10s. Busque uma vez, guarde em cache e pare de pedi-los de novo no seu loop quente. - Use WebSockets para o estado ao vivo. Fazer polling de
/bookcom um timer é a forma mais comum de queimar o orçamento de requisições. Assine o stream e deixe o servidor enviar as mudanças. - Adicione jitter aos jobs agendados. Se todos os workers acordam exatamente na virada do minuto, você cria um pico sincronizado bem acima da sua taxa média. Torne aleatórios os deslocamentos de início.
- Observe a latência, não só as taxas de erro. Como a Cloudflare atrasa em vez de rejeitar, a latência p99 subindo é o primeiro sinal de que você passou de um limite por IP — muito antes de qualquer coisa aparecer como erro.
- Acompanhe os headers. Ler
Poly-RateLimit-Remainingnão custa nada e diz exatamente quanto orçamento resta.
Limites de requisições não são o mesmo que acesso a dados
Uma última coisa que vale deixar explícita, porque é o equívoco mais comum que vemos: nenhum nível de limite de requisições dá acesso à profundidade histórica do livro de ofertas. A API da Polymarket serve o estado atual do livro. Ela não expõe um arquivo histórico de como estava o livro às 14:03:17 da última terça-feira, e depois que um mercado é resolvido o livro de ofertas dele retorna 404.
Isso é uma lacuna estrutural, e não um problema de limitação, e nenhuma lógica de backoff resolve. Se você está tentando fazer backtest de uma estratégia, precisa de snapshots pontuais que alguém gravou na época — que é exatamente o que a PolyTest existe para oferecer: mais de 240M de snapshots históricos dos mercados cripto Up/Down da Polymarket, com profundidade completa do livro de ofertas, resolução abaixo de um segundo e sem lacunas.
| Plano | Requisições / min | Pico / s | Histórico |
|---|---|---|---|
| Free | 30 | 2 | Mercados recentes |
| Builder | 250 | 12 | 14 dias |
| Pro | 750 | 40 | Histórico completo |
| Enterprise | Personalizado | Personalizado | Histórico completo + exportação em massa |
GET /api/v1/limits. Veja limites de requisições e preços.Perguntas frequentes
- Qual é o limite de requisições por segundo da API da Polymarket?
- A Polymarket publica os limites por janela de 10 segundos, então divida por 10. O teto global é de 15,000 req / 10s (1,500 rps), mas os limites por endpoint são bem menores e são eles que valem na prática: /book e /price do CLOB permitem 1,500 req / 10s (150 rps), o endpoint /markets da Gamma permite só 300 req / 10s (30 rps) e o endpoint /positions da Data API permite 150 req / 10s (15 rps).
- A Polymarket retorna 429 quando você excede o limite de requisições?
- Depende de qual limitador você atingiu. Os limites por IP da Cloudflare atrasam as requisições — elas são atrasadas e colocadas em fila em vez de rejeitadas —, então você vê a latência subir em vez de erros. Os token buckets por signer, separados, nos endpoints de ordem e cancelamento do CLOB retornam 429 Too Many Requests, junto com um header Retry-After que informa o atraso mínimo antes de tentar de novo.
- Quais são os limites de requisições da API CLOB da Polymarket?
- O limite geral do CLOB é de 9,000 req / 10s. Os endpoints de dados de mercado /book, /price e /midpoint permitem 1,500 req / 10s cada, enquanto seus equivalentes em lote /books, /prices e /midpoints permitem 500 req / 10s. Os endpoints de registro permitem 900 req / 10s. Os endpoints de trading têm limites de pico e sustentados: POST /order permite 5,000 req / 10s de pico e 120,000 req / 10 min sustentados.
- Quais são os limites de requisições da API Gamma da Polymarket?
- O limite geral da API Gamma é de 4,000 req / 10s. Os endpoints individuais são mais apertados: /events tem 500 req / 10s, /markets tem 300 req / 10s, a listagem combinada /markets + /events tem 900 req / 10s, /public-search tem 350 req / 10s e /comments e /tags têm 200 req / 10s cada. O limite de /markets é o limite de uso comum mais apertado da plataforma.
- Os limites de requisições da Polymarket são por endereço IP ou por chave de API?
- Os principais limites da Cloudflare são por endereço IP, não por chave de API, então várias chaves atrás de um mesmo IP compartilham um único orçamento. Os limites separados de token bucket nos endpoints de ordem e cancelamento do CLOB têm como escopo o seu endereço de signer e são dimensionados pelo nível de volume de trading de 30 dias da sua carteira maker.
- Consigo dados históricos do livro de ofertas da Polymarket pela API?
- Não. A API da Polymarket serve apenas o estado atual do mercado. Não existe arquivo histórico de profundidade do livro de ofertas, e o livro de um mercado resolvido retorna 404. O backtesting exige snapshots pontuais gravados enquanto os mercados estavam ativos. A PolyTest oferece mais de 240M desses snapshots dos mercados cripto Up/Down da Polymarket, com profundidade completa de 8 níveis do livro de ofertas e resolução abaixo de um segundo.
Tenha os dados históricos que a Polymarket não guarda
A PolyTest registra os mercados cripto Up/Down da Polymarket enquanto estão ativos — mais de 240M de snapshots com 8 níveis de profundidade do livro de ofertas, timestamps abaixo de um segundo e mercados resolvidos preservados. Comece com um teste grátis de 3 dias.
Continue lendo
WebSockets da Polymarket: dados em tempo real que não caem
Fazer polling do livro de ofertas é a forma mais comum de queimar o orçamento de limite de requisições sem ganhar nada. Veja os quatro streams, as opções de assinatura que ninguém documenta e o modo de falha em que seu bot recebe silêncio e acha que é calmaria.
Erros da API da Polymarket: todos os códigos, decifrados
As mensagens de erro da Polymarket são lacônicas, e as que quebram seu bot às 3 da manhã costumam ser justamente as que nem aparecem na documentação. Aqui está a referência completa — erros documentados, não documentados e o que fazer de fato com cada um.
Como criar um bot de trading para a Polymarket
A maioria dos tutoriais de bots para a Polymarket usa SDKs que não existem mais. Este é o caminho atual de ponta a ponta — o que instalar em 2026, como a autenticação realmente funciona, onde estão as lacunas de dados e os modos de falha que matam bots na primeira semana.