Skip to content
Terminal

The chart agrees with the tape.

Candles and the latest mark come from one feed, so the two surfaces cannot disagree.

The request

Two calls, one contract.

Bars for the chart, the latest mark for the tape, from the same schema.

Latest mark · BTC

84,240.00USD

published 02:38:15 UTC · from the tape

Last close · 1m

84,194.62USD

bucket 02:37 UTC · from the chart

Mark − close
+45.38USD+0.05%the mark is above the close

One decimal convention on both sides, so this is a subtraction.

The chart2026-09-24 02:37O 84,196.01H 84,196.01L 84,180.00C 84,194.62V 2.56
84,240.00

119 bars · 1m buckets · every body and wick is that bucket's own open, high, low and close · the dotted rule is that newest close

119 1m bars for Bitcoin, from 2026-09-24 00:39 to 2026-09-24 02:37. The drawn window runs from 83,687 to 84,529 USD, with the latest mark at 84,240.00.

The tape
PrintedPriceMove
02:38:1584,240.00first

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=BTC
The fields

What draws a candle.

Apple · the last closed bar2026-09-23 00:00 UTC

Every figure below is that bar, printed to the places the rest of the screen reads at.

closestring
337.00Bar close as a decimal string, matching the mark on the tape.
timestampstring
2026-09-23T00:00:00.000ZBucket start, ascending, so bars append without a re-sort.
intervalenum
1dThe bucket you asked for, echoed back on every bar.
volumestring | null
1308.09Null means the source published no size, not a measured zero.

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.

The build

Draw the chart, then the tape.

BUILD · CHART AND 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.