# Quotes channel

`/ws/quotes` is a subscribe-only stream of marks. It exists so a client that
needs a current price for many symbols doesn't have to hold a full depth
subscription for each one.

## What it carries

One `Quote-Update` per change, per venue and symbol:

```json
{
  "type": "Quote-Update",
  "venue": "hyperliquid",
  "symbol": "BTC",
  "mid": "104213.5",
  "bid": null,
  "ask": null,
  "last": null,
  "source": "be_canonical",
  "ts": "2026-05-24T18:30:00.000Z"
}
```

The mark is in `mid`, as a decimal **string**. `bid`, `ask` and `last` are
reserved and always `null` today — take the inside quote from `BBO-Update` on
[`/ws/market`](https://docs.troncharts.xyz/docs/realtime/market/) instead. `ts` is an ISO-8601 timestamp,
not an epoch number. Futures and B3 symbols additionally carry
`marketStatus: "open" | "closed"`; its absence means open.

## Frames you can send

| Frame | Purpose |
| --- | --- |
| `Subscribe-Quote { venue, symbol }` | Start pushing one symbol. |
| `Subscribe-Quotes-Bulk { items }` | Up to 200 `{ venue, symbol }` pairs in one frame. |
| `Unsubscribe-Quote { venue, symbol }` | Stop pushing one symbol. |
| `Unsubscribe-All` | Drop every subscription on the socket. |
| `Get-Quote { venue, symbol }` | One-shot read, no subscription. |
| `Authenticate`, `Ping` | Optional handshake; heartbeat. |

`venue` and `symbol` are separate fields — there is no `venue:symbol` string on
the wire. Marks are public data, so no `Authenticate` frame is required; send
one only to attach a scope to the connection.

## When to use it instead of `/ws/market`

| You need | Use |
| --- | --- |
| A price for a watchlist, a portfolio valuation, a PnL readout | `/ws/quotes` |
| The book, the tape, or bar updates | [`/ws/market`](https://docs.troncharts.xyz/docs/realtime/market/) |

Valuing 200 positions over the quotes channel is one subscription set. Doing it
over depth subscriptions is 200 books you don't read.

## Marks are the settlement reference

The mark on this channel is the platform's canonical price for a symbol — the
same reference used for margin and for settling an internalised fill. Do not
smooth or interpolate it before using it as a price of record; smooth it in
your chart layer only.

## Encoding

`?encoding=msgpack` applies here too. It is worth taking on a large bulk
subscription, where one frame per symbol adds up.