Skip to main content
The websocket API requires a valid API key. You can get one by contacting us.
The trades channel streams real-time trade execution updates for prediction markets. Use this channel to build trade feeds, activity monitors, and market analysis tools.

Subscribe

Subscribe to All Trades

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

Subscribe to Specific Tickers

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

Unsubscribe

Unsubscribe from All Trades

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

Unsubscribe from Specific Tickers

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

Response Format

When subscribed to the trades channel, you’ll receive messages with the following structure:
{
  "channel": "trades",
  "type": "trade",
  "market_ticker": "BTCD-25DEC0313-T92749.99",
  "trade_id": "abc123",
  "price": 47,
  "count": 100,
  "yes_price": 47,
  "no_price": 53,
  "yes_price_dollars": "0.47",
  "no_price_dollars": "0.53",
  "taker_side": "yes",
  "created_time": 1702744800000
}

Response Fields

FieldTypeDescription
channelstringAlways "trades"
typestringAlways "trade"
market_tickerstringMarket identifier
trade_idstringUnique trade identifier
pricenumberTrade execution price
countnumberNumber of contracts traded
yes_pricenumberYES outcome price at execution
no_pricenumberNO outcome price at execution
yes_price_dollarsstringYES price formatted in dollars
no_price_dollarsstringNO price formatted in dollars
taker_sidestringSide of the taker ("yes" or "no")
created_timenumberUnix timestamp in milliseconds

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 trade updates
  ws.send(
    JSON.stringify({
      type: "subscribe",
      channel: "trades",
      all: true,
    })
  );
};

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

  if (message.channel === "trades") {
    console.log("Trade executed:", {
      ticker: message.market_ticker,
      tradeId: message.trade_id,
      side: message.taker_side,
      count: message.count,
      yesPrice: message.yes_price_dollars,
      noPrice: message.no_price_dollars,
      time: new Date(message.created_time).toISOString(),
    });
  }
};

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 trades
  ws.send(
    JSON.stringify({
      type: "subscribe",
      channel: "trades",
      tickers: marketTickers,
    })
  );
};

ws.onmessage = (event) => {
  const message = JSON.parse(event.data);
  console.log(`Trade on ${message.market_ticker}:`, message);
};
interface TradeUpdate {
  channel: "trades";
  type: "trade";
  market_ticker: string;
  trade_id: string;
  price: number;
  count: number;
  yes_price: number;
  no_price: number;
  yes_price_dollars: string;
  no_price_dollars: string;
  taker_side: "yes" | "no";
  created_time: number;
}

function handleTradeUpdate(update: TradeUpdate) {
  console.log(`Trade executed on ${update.market_ticker}:`, {
    tradeId: update.trade_id,
    side: update.taker_side,
    count: update.count,
    yesPrice: update.yes_price_dollars,
    noPrice: update.no_price_dollars,
    time: new Date(update.created_time).toISOString(),
  });
}