A Polymarket substituiu o RTDS: migrando para o PolyBolt
Em 15 de setembro, a Polymarket transformou discretamente o RTDS em legado para preços de referência. Se você faz streaming de spot para um bot, seis coisas mudaram de uma vez — incluindo a fonte de preços e o formato dos símbolos — e a maioria delas falha em silêncio, não com alarde.
O que mudou, e quando
Em 15 de setembro de 2026, a Polymarket lançou o PolyBolt em wss://ws-live-v2.polymarket.com/ws e transformou o RTDS em legado para preços de referência. crypto_prices, crypto_prices_chainlink e equity_prices passam todos para novos canais. O tópico comments continua no RTDS por enquanto.
Se o seu bot faz streaming de preços spot para decidir qualquer coisa — e nos mercados cripto Up/Down a maioria faz —, isso afeta você. Seis coisas mudaram de uma vez, e a parte chata é que várias delas falham em silêncio: você continua conectado, só para de receber os preços que acha que está recebendo.
As seis mudanças incompatíveis
| RTDS (legado) | PolyBolt | |
|---|---|---|
| URL | wss://ws-live-data.polymarket.com | wss://ws-live-v2.polymarket.com/ws |
| Autenticação | Pública | Credenciais da API CLOB obrigatórias |
| Heartbeat | O cliente envia PING a cada 5s | Nada a enviar — o servidor envia ping a cada 25s |
| Frame de assinatura | {action, subscriptions:[{topic,type,filters}]} | {op, subscriptions:[{channel,filter}]} — filter é um objeto, não uma string |
| Fonte cripto | Binance / Chainlink | Pyth |
| Símbolos | btcusdt, btc/usd | btcusd — minúsculas, USD e não USDT |
As duas que vão custar mais tempo
A fonte de preços mudou para a Pyth. Seu preço de referência agora vem de um oráculo diferente do que vinha em 14 de setembro. Se você calibrou limites com ticks da Binance, recalibre. E o formato dos símbolos mudou — btcusdt e btc/usd estão os dois errados agora. Um símbolo inválido não gera erro; você recebe uma assinatura que nunca entrega nada.
Mapeamento de canais
| Tópico do RTDS | Canal do PolyBolt | Filtro | Observação |
|---|---|---|---|
crypto_prices | price.crypto | {"symbol":"btcusd"} | Fonte Binance → Pyth; USDT → USD |
crypto_prices_chainlink | price.crypto | {"symbol":"btcusd"} | Fonte Chainlink → Pyth |
crypto_prices_twap_sixty | price.crypto.twap | {"symbol":"btcusd","window_seconds":60} | TWAP da Chainlink de 60s |
crypto_prices_twap_thirty | Nenhum | — | Não existe substituto |
equity_prices | price.equity | {"symbol":"aapl"} | Mesmo catálogo, em minúsculas |
O TWAP de 30 segundos simplesmente sumiu
crypto_prices_twap_thirty não tem equivalente no PolyBolt. Isso importa mais do que parece: os mercados cripto de 5 minutos foram resolvidos brevemente com um TWAP de 30 segundos depois de 7 de agosto e passaram para 60 segundos em 14 de agosto. Se alguma coisa na sua stack ainda consome a janela de 30s, ela não tem caminho de migração — você precisa do canal de 60s e de um modelo recalibrado.
Conectando
Autentique-se primeiro na conexão aberta, espere a confirmação e depois assine. Os canais de preços de referência rejeitam assinaturas não autenticadas.
{
"op": "auth",
"rid": "a1",
"auth": {
"apiKey": "<api key>",
"secret": "<api secret>",
"passphrase": "<api passphrase>"
}
}Essas credenciais são as mesmas que você deriva para operar no CLOB — chave, secret e passphrase juntos. Se você nunca as criou, o guia de endpoints cobre o fluxo L1/L2.
Três coisas que o PolyBolt oferece e o RTDS não oferecia
- Um snapshot a cada assinatura. Cada assinatura retorna os dois minutos anteriores de preços com
snapshot: true, possivelmente vazio. Inicialize o estado local a partir dele e depois aplique as atualizações ao vivo. No RTDS, um símbolo parado só dava silêncio, e você não fazia ideia se estava conectado ou apenas entre dois ticks. - Um
seqdenso e um contadordropped. Finalmente dá para detectar lacunas. O RTDS não tinha sequência nenhuma, então uma mensagem perdida era invisível. Acompanhe oseqpor canal e trate qualquer salto como gatilho de ressincronização. - Códigos de fechamento tipados em vez do
1006cru:4001autenticação,4002consumidor lento,4003drenando,4008política. Um4002significa que você está lento demais para drenar o socket — é um bug no consumidor, não um problema de rede, e reconectar não vai resolver.
Use full_accuracy_value, não value
value é um float; full_accuracy_value é uma string decimal exata. Em um mercado que liquida por comparação de TWAP, arredondamento de float na oitava casa decimal não é algo que você quer decidindo uma operação. Além disso: os frames de TWAP legados usavam window_s e um preço em ponto fixo E18. O PolyBolt envia uma string decimal — não aplique a conversão E18, ou seus preços vão ficar errados em dezoito ordens de grandeza.
Limites de conexão
O RTDS não publicava nenhum. O PolyBolt publica, e violar qualquer um deles fecha o socket com 4008:
| Limite | Valor |
|---|---|
| Assinaturas por conexão | 64 |
| Frames de assinatura por segundo | 20 |
| Tamanho máximo do frame | 64 KB |
| Frames de autenticação | 8 |
As 64 assinaturas são o limite com que você precisa se planejar. Se você acompanha BTC, ETH e SOL em spot e TWAP, são seis, então sobra bastante folga para um bot cripto — mas um sistema que se espalha pelo catálogo de ações vai bater nele.
Migrando um bot, em ordem
- Derive as credenciais da API CLOB, se você não as tem. O RTDS era público; o PolyBolt não é. Este é o passo que bloqueia todo o resto.
- Troque a URL para
wss://ws-live-v2.polymarket.com/ws. - Apague o heartbeat do cliente. O loop de
PINGa cada 5 segundos não só é desnecessário como agora é ruído. O servidor envia ping para você a cada 25 segundos. - Reescreva os frames de assinatura —
action→op,topic→channel, efiltervira um objeto JSON em vez de uma string. - Corrija todos os símbolos:
btcusdtebtc/usdvirambtcusd. Minúsculas, USD. - Trate o frame de snapshot para não confundir dois minutos de histórico com ticks ao vivo.
- Adicione detecção de lacunas no
seqe ressincronize quando houver um salto. - Recalibre tudo o que foi ajustado com preços da Binance. A fonte agora é a Pyth.
Se você usa o SDK TypeScript
O @polymarket/client 0.11.0 e versões posteriores encapsulam isso: client.subscribe([{ topic: "prices.crypto", symbols: ["btcusd"] }]) em um SecureClient autenticado, e você itera sobre eventos tipados com os tipos subscribe e update. Ele cuida da autenticação, dos frames e dos heartbeats para você — veja o guia do SDK para o panorama mais amplo da migração.
O que isto não muda
Vale ser preciso, porque é fácil migrar demais. Os canais market e user do CLOB não foram alterados. wss://ws-subscriptions-clob.polymarket.com/ws/market continua transmitindo atualizações do livro de ofertas e de preços, continua exigindo um PING do cliente a cada 10 segundos e continua escondendo best_bid_ask, new_market e market_resolved atrás de custom_feature_enabled. Só os preços de referência mudaram. Detalhes no guia de WebSocket.
E a limitação mais profunda também não mudou: um stream dá a você preços a partir do momento em que você se conecta. Ele não consegue dizer como estava o livro na última terça-feira. A Polymarket retorna 404 para o livro de um mercado resolvido e guarda só cerca de um ponto por minuto de histórico de preços, e é por isso que o backtesting precisa de um arquivo gravado enquanto os mercados estavam ativos. Veja como funcionam os mercados Up/Down ou procure um mercado específico na busca de mercados.
Perguntas frequentes
- O que é o PolyBolt e quando ele substituiu o RTDS?
- O PolyBolt é o WebSocket da Polymarket para preços de referência de cripto, ações e TWAP, lançado em 15 de setembro de 2026 em wss://ws-live-v2.polymarket.com/ws. Ele transforma o RTDS em legado para preços de referência: crypto_prices, crypto_prices_chainlink e equity_prices passam todos para novos canais do PolyBolt. O tópico comments continua no RTDS por enquanto.
- Preciso de autenticação para o PolyBolt?
- Sim. Os canais de preços de referência exigem credenciais da API CLOB — chave, secret e passphrase —, enviadas como um frame de autenticação na conexão aberta antes de assinar. Essa é a principal diferença operacional em relação ao RTDS, que era público. Espere o servidor confirmar a autenticação antes de enviar frames de assinatura.
- O que substituiu o crypto_prices_chainlink?
- O canal price.crypto com o filtro {"symbol":"btcusd"}. Duas coisas mudam além do nome: a fonte passa da Chainlink para a Pyth, e o formato do símbolo muda de btc/usd para btcusd em minúsculas. Para o TWAP da Chainlink de 60 segundos, use price.crypto.twap com window_seconds definido como 60. O tópico de TWAP de 30 segundos não tem substituto no PolyBolt.
- O PolyBolt ainda precisa de PING do cliente?
- Não. No RTDS, o cliente enviava um PING de texto a cada 5 segundos. No PolyBolt, o servidor envia ping a cada 25 segundos e o cliente não envia nada, embora um {"op":"ping"} opcional seja aceito. Note que isso é diferente do canal market do CLOB, que não mudou e ainda exige um PING do cliente a cada 10 segundos.
- Por que estou conectado ao PolyBolt mas não recebo preços?
- Quase sempre é um problema de formato de símbolo. O PolyBolt usa símbolos em minúsculas terminados em usd, então btcusdt e btc/usd são ambos inválidos — use btcusd. Um símbolo inválido não gera erro; a assinatura simplesmente nunca entrega nada. Verifique também se a autenticação foi confirmada antes de você enviar o frame de assinatura, e se você não está tratando o frame de snapshot inicial como os únicos dados.
- O que significam os códigos de fechamento do PolyBolt?
- 4001 é falha de autenticação, 4002 significa que você é um consumidor lento e não está drenando o socket rápido o bastante, 4003 significa que o servidor está drenando e 4008 é uma violação de política, como passar de 64 assinaturas, 20 frames de assinatura por segundo, um frame de 64 KB ou 8 frames de autenticação. Um 4002 é um bug no seu consumidor, e não uma falha de rede, então reconectar sem corrigir a vazão só vai repetir o problema.
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.
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.
O SDK Python da Polymarket em 2026 (e como sair do py-clob-client)
Se o seu código ainda importa ClobClient de py_clob_client, ele está construído sobre um pacote substituído — assim como a maior parte do código da Polymarket que um assistente de IA vai escrever para você. Veja o SDK atual e como migrar.