Skip to content

Public market data streams

Evidence: ptrader-ws-gateway/docs/WS_API_SPOT.md (aligned with openapi quote paths).

Symbol names in channel strings are case-insensitive.

Aggregate trade — <symbol>@aggTrade

{
  "e": "aggTrade",
  "E": 1672515782136,
  "s": "BTCUSDT",
  "a": 5933014,
  "p": "0.001",
  "q": "100",
  "f": 100,
  "l": 105,
  "T": 1672515782136,
  "m": true
}

Trade — <symbol>@trade

{
  "e": "trade",
  "E": 1672515782136,
  "s": "BTCUSDT",
  "t": 12345,
  "p": "0.001",
  "q": "100",
  "b": 88,
  "a": 50,
  "T": 1672515782136,
  "m": true
}

Kline — <symbol>@kline_<interval>

Intervals: 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M.

Payload follows the Binance-style k object (illustrative — see internal WS_API_SPOT.md for full field table).

Tickers

Stream Description
<symbol>@miniTicker Mini ticker
!miniTicker@arr All market mini tickers
<symbol>@ticker Full ticker
!ticker@arr All market tickers
<symbol>@bookTicker Best bid/ask
!bookTicker All book tickers

Depth

Stream Description
<symbol>@depth<levels> or @depth<levels>@100ms Partial book (levels e.g. 5/10/20)
<symbol>@depth or @depth@100ms Diff depth

Local book sync (diff depth)

  1. Subscribe to <symbol>@depth.
  2. REST snapshot: GET /openapi/quote/v1/depth?symbol=<SYMBOL>.
  3. Drop events with u ≤ snapshot lastUpdateId.
  4. Apply diffs; quantity "0" removes a level.
  5. Ensure each event U equals previous u + 1, else re-snapshot.

Evidence: WS_API_SPOT.md “How to maintain a local order book”.