# Live markets

> A real STX order book, streaming in your browser. See the spread and the depth before deciding whether to build.

Source: https://docs.stxapp.io/explore/live-markets/

Every `/api/v1` route requires a signed request, but you should not need a
working Ed25519 implementation before you see a single price. This page streams
a book straight into your browser.

Below is a real order book, streaming over the same WebSocket channel your
client would join. It reads from the US demo exchange, so the orders
are real but the money is not. Books there are seeded for testing, which is
why the spreads look more uniform than a live market's.

The book itself needs no key: paste a market id or symbol and it streams. To
pick from a list of open markets instead, save a demo API key in
[Try it](/quick-start/#try-it) on Quick start first. The page uses it, from your
browser, to make one signed `GET /api/v1/markets` call.

<LiveBook />

The panel below the ladder is the wire, unedited: the same message your client
will parse, including the fields this page ignores. Phoenix sends each one as a
five-element array: join reference, message reference, topic, event, payload.

## Reading it

The ladder shows prices in cents. A bid of `44¢` is someone offering to pay
that for a contract worth $1 if the event resolves yes, and nothing if it does
not, so it reads directly as "a 44% chance". On the wire, in the `ob` book, the
same level is the JSON number `0.44`, in dollars. To place that order over REST
you send the `price` as the dollar string `"0.44"`.

The number beside each price is quantity, in contracts. The shaded bar behind
a row is that level's size relative to the largest on its side.

## What this tells you

Spread is the number worth looking at. It is what a taker pays to cross, and
what a maker earns for standing between the two sides. Wide spreads on markets
with real volume are the opportunity: the book you see is what your quotes
would be competing against, and there is currently a lot of room in it.

If you want the same data programmatically, this is the join the page sends.
Market-wide channels accept it on an unsigned connection, as long as the
handshake sends a `User-Agent` header. Your account channels need a signed one
(see [WebSocket channels](/websockets/)):

```json
["1", "1", "market:<market_id>", "phx_join", {}]
```

The join reply carries the whole book, `recent_trades`, `volume_24h` and
`last_traded_price`. See [WebSocket channels](/websockets/) for the frame
format and [the order book channel](/websockets/order-book/) for the update
events.

Everything else, from placing orders to your positions and fills, is signed. That
is [Quick Start](/quick-start/).
