The chart agrees with the tape.
Candles and the latest mark come from one feed, so the two surfaces cannot disagree.
Two calls, one contract.
Bars for the chart, the latest mark for the tape, from the same schema.
75,929.09USD
published 08:45:51 UTC · from the tape
Unavailable
no 1m bar in this window to close
Unavailable
nothing to subtract until both calls land
Reading 1m bars…
Nothing drawn for this window · 1m buckets
| Printed | Price | Move |
|---|---|---|
| 08:45:51 | 75,929.09 | first |
One row per published mark — a read that returns the same updated_at prints nothing. The last ten stay on the tape.
GET /v1/prices/ohlcv?asset=BTC&interval=1mGET /v1/prices/latest?assets=BTCWhat draws a candle.
The store has no closed bar for Apple in this window, so there is none to take apart. Nothing here is a made-up candle — this fold fills in with whatever the read returns, and says this when it returns nothing it can vouch for.
And what a bar is not.
A bar is its bucket and nothing more. There is no bid behind it, no ask, and no size at a level — LIAW publishes prices, so the book is not ours to hand you.
Draw the chart, then the tape.
const bars = await ohlcv('BTC', { interval: '1m', limit: 240 }) const [tick] = (await latest('BTC')).data chart.draw(bars.data) tape.write(tick.price)
Two polls on a timer, and the chart cannot disagree with the tape because both came out of the same schema.
Bars append.
timestamp ascends on every response, so a redraw appends to the series instead of re-sorting it.
The mark replaces itself.
One row per asset per read, and updated_at says whether it moved since the last one.
The blotter stays yours.
Orders, positions and fills never leave your terminal — this contract ends at the price.
Point a terminal at it.
Open the live board, or read the candles reference.