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 on Quick start first. The page uses it, from your
browser, to make one signed GET /api/v1/markets call.
The book streams with no key. To list markets here, save a demo API key in Try it on Quick start; until then, paste a market id or symbol.
Connecting…US demo environment - real orders, no real money
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
Section titled “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
Section titled “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):
["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 for the frame
format and the order book channel for the update
events.
Everything else, from placing orders to your positions and fills, is signed. That is Quick Start.

