Skip to main content
Stream real-time crypto prices over WebSocket. 7 feeds, ~1 update per second each.

Connection

wss://ws.polynode.dev/ws?key=YOUR_API_KEY
This is the same WebSocket endpoint used for settlements and orderbook. If you already have a connection open, you don’t need a new one.

Available feeds

FeedPairUpdate rate
BTC/USDBitcoin / US Dollar~1/second
ETH/USDEthereum / US Dollar~1/second
SOL/USDSolana / US Dollar~1/second
BNB/USDBNB / US Dollar~1/second
XRP/USDXRP / US Dollar~1/second
DOGE/USDDogecoin / US Dollar~1/second
HYPE/USDHyperliquid / US Dollar~1/second

Quick start

Connect and subscribe to all 7 feeds:
const WebSocket = require("ws");

const ws = new WebSocket(
  "wss://ws.polynode.dev/ws?key=YOUR_API_KEY"
);

ws.on("open", () => {
  ws.send(JSON.stringify({
    action: "subscribe",
    type: "chainlink"
  }));
});

ws.on("message", (data) => {
  const msg = JSON.parse(data);
  if (msg.type === "price_feed") {
    console.log(`${msg.data.feed}: $${msg.data.price}`);
  }
});

Filter to specific feeds

Only receive the feeds you care about:
{
  "action": "subscribe",
  "type": "chainlink",
  "filters": {
    "feeds": ["BTC/USD", "ETH/USD"]
  }
}
Omit feeds to get all 7.

Event format

Every price update arrives as a price_feed event:
{
  "type": "price_feed",
  "feed": "BTC/USD",
  "timestamp": 1774672588,
  "data": {
    "feed": "BTC/USD",
    "price": 66225.49,
    "bid": 66221.69,
    "ask": 66229.46,
    "timestamp": 1774672588
  }
}
See Event Format for the full field reference.

Combining with other streams

Crypto prices run on the same WebSocket connection as settlements, orderbook, and oracle streams. Send multiple subscribe messages:
// Settlements + crypto prices on the same connection
ws.on("open", () => {
  ws.send(JSON.stringify({ action: "subscribe", type: "settlements" }));
  ws.send(JSON.stringify({ action: "subscribe", type: "chainlink" }));
});

ws.on("message", (data) => {
  const msg = JSON.parse(data);
  if (msg.type === "price_feed") {
    // crypto price tick
    console.log(`${msg.data.feed}: $${msg.data.price}`);
  } else if (msg.type === "settlement") {
    // polymarket settlement
    console.log(`${msg.question}: ${msg.outcome}`);
  }
});
Use the type field ("price_feed" vs "settlement") to route events.

REST Endpoints

In addition to the WebSocket stream, crypto data is available via REST. See the REST API reference for full details.
EndpointDescription
GET /v1/crypto/marketsAll crypto prediction markets
GET /v1/crypto/candles?symbol=BTC5-min OHLC candles from Chainlink oracle
GET /v1/crypto/price?symbol=BTC&window={epoch}Open/close price for a market window
GET /v1/crypto/activeCurrently active 5-minute markets for all 7 coins
GET /v1/crypto/seriesRecurring crypto market series
All endpoints require an API key via ?key= or x-api-key header.

Use cases

  • Short-form market trading — track the underlying asset price alongside 5m/15m/1h crypto markets
  • Portfolio valuation — combine real-time crypto prices with Polymarket positions for live PnL
  • Hedging signals — correlate crypto price moves with prediction market settlements
  • Dashboards — display live crypto prices alongside prediction market data
  • Trading bots — trigger Polymarket trades based on crypto price thresholds