Skip to main content
The websocket API requires a valid API key. You can get one by contacting us.
The prices channel streams real-time bid and ask price updates for prediction markets. Use this channel to build live price tickers, trading interfaces, and market monitoring tools.

Subscribe

Subscribe to All Prices

{
  "type": "subscribe",
  "channel": "prices",
  "all": true
}

Subscribe to Specific Tickers

{
  "type": "subscribe",
  "channel": "prices",
  "tickers": ["BTCD-25DEC0313-T92749.99", "SPX-25DEC0313-T5000"]
}

Unsubscribe

Unsubscribe from All Prices

{
  "type": "unsubscribe",
  "channel": "prices",
  "all": true
}

Unsubscribe from Specific Tickers

{
  "type": "unsubscribe",
  "channel": "prices",
  "tickers": ["BTCD-25DEC0313-T92749.99"]
}

Response Format

When subscribed to the prices channel, you’ll receive messages with the following structure:
{
  "channel": "prices",
  "type": "ticker",
  "market_ticker": "BTCD-25DEC0313-T92749.99",
  "yes_bid": "0.45",
  "yes_ask": "0.47",
  "no_bid": "0.53",
  "no_ask": "0.55"
}

Response Fields

FieldTypeDescription
channelstringAlways "prices"
typestringMessage type
market_tickerstringMarket identifier
yes_bidstring | nullBest bid price for YES outcome
yes_askstring | nullBest ask price for YES outcome
no_bidstring | nullBest bid price for NO outcome
no_askstring | nullBest ask price for NO outcome
Price fields may be null if there is no current bid or ask at that level.

Code Examples

const WEBSOCKET_URL = "wss://prediction-markets-api.dflow.net/api/v1/ws";

const ws = new WebSocket(WEBSOCKET_URL);

ws.onopen = () => {
  console.log("Connected to WebSocket");

  // Subscribe to all price updates
  ws.send(
    JSON.stringify({
      type: "subscribe",
      channel: "prices",
      all: true,
    })
  );
};

ws.onmessage = (event) => {
  const message = JSON.parse(event.data);

  if (message.channel === "prices") {
    console.log("Price update:", {
      ticker: message.market_ticker,
      yesBid: message.yes_bid,
      yesAsk: message.yes_ask,
      noBid: message.no_bid,
      noAsk: message.no_ask,
    });
  }
};

ws.onerror = (error) => {
  console.error("WebSocket error:", error);
};

ws.onclose = () => {
  console.log("WebSocket connection closed");
};
const WEBSOCKET_URL = "wss://prediction-markets-api.dflow.net/api/v1/ws";

// Market tickers to subscribe to
const marketTickers = ["BTCD-25DEC0313-T92749.99", "SPX-25DEC0313-T5000"];

const ws = new WebSocket(WEBSOCKET_URL);

ws.onopen = () => {
  console.log("Connected to WebSocket");

  // Subscribe to specific tickers for prices
  ws.send(
    JSON.stringify({
      type: "subscribe",
      channel: "prices",
      tickers: marketTickers,
    })
  );
};

ws.onmessage = (event) => {
  const message = JSON.parse(event.data);
  console.log(`Price update for ${message.market_ticker}:`, message);
};
interface PriceUpdate {
  channel: "prices";
  type: string;
  market_ticker: string;
  yes_bid: string | null;
  yes_ask: string | null;
  no_bid: string | null;
  no_ask: string | null;
}

function handlePriceUpdate(update: PriceUpdate) {
  console.log(`Price update for ${update.market_ticker}:`, {
    yesBid: update.yes_bid,
    yesAsk: update.yes_ask,
    noBid: update.no_bid,
    noAsk: update.no_ask,
  });
}