> ## Documentation Index
> Fetch the complete documentation index at: https://pond.dflow.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Prices Channel

> Subscribe to real-time bid/ask price updates for prediction markets

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.

## Connection

See the [WebSocket overview](/resources/metadata-api/websockets/overview#connection) for connection setup and endpoint details.

## Subscribe

### Subscribe to All Prices

```json theme={null}
{
  "type": "subscribe",
  "channel": "prices",
  "all": true
}
```

### Subscribe to Specific Tickers

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

## Unsubscribe

### Unsubscribe from All Prices

```json theme={null}
{
  "type": "unsubscribe",
  "channel": "prices",
  "all": true
}
```

### Unsubscribe from Specific Tickers

```json theme={null}
{
  "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:

```json theme={null}
{
  "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

| Field           | Type           | Description                    |
| --------------- | -------------- | ------------------------------ |
| `channel`       | string         | Always `"prices"`              |
| `type`          | string         | Message type                   |
| `market_ticker` | string         | Market identifier              |
| `yes_bid`       | string \| null | Best bid price for YES outcome |
| `yes_ask`       | string \| null | Best ask price for YES outcome |
| `no_bid`        | string \| null | Best bid price for NO outcome  |
| `no_ask`        | string \| null | Best ask price for NO outcome  |

<Note>
  Price fields may be `null` if there is no current bid or ask at that level.
</Note>

## Code Examples

<AccordionGroup>
  <Accordion title="Subscribe to All Prices">
    ```typescript theme={null}
    // Dev endpoint — no API key required, but rate-limited.
    // For production, use your production WS URL and add:
    //   { headers: { "x-api-key": "YOUR_API_KEY" } }
    // as the second argument to new WebSocket().
    const WS_URL = "wss://dev-prediction-markets-api.dflow.net/api/v1/ws";

    const ws = new WebSocket(WS_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");
    };
    ```
  </Accordion>

  <Accordion title="Subscribe to Specific Markets">
    ```typescript theme={null}
    // Dev endpoint — no API key required, but rate-limited.
    // For production, use your production WS URL and add:
    //   { headers: { "x-api-key": "YOUR_API_KEY" } }
    // as the second argument to new WebSocket().
    const WS_URL = "wss://dev-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(WS_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);
    };
    ```
  </Accordion>

  <Accordion title="TypeScript Interface">
    ```typescript theme={null}
    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,
      });
    }
    ```
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={3}>
  <Card title="Trades Channel" href="trades" icon="receipt">
    Subscribe to real-time trade execution updates
  </Card>

  <Card title="Orderbook Channel" href="orderbook" icon="list">
    Subscribe to real-time orderbook depth updates
  </Card>

  <Card title="Live Data API" href="/resources/metadata-api/live-data/live-data" icon="bolt">
    Get live data snapshots via REST API
  </Card>
</CardGroup>
