Skip to content
Alchemy Logo

bbo stream

This API is in private preview. Target September 2026; timing is subject to change.

bbo delivers the top-of-book best bid and offer when either side changes. This is ideal for live prices and spreads.

For the corresponding gRPC stream, see StreamBboBook.

{"method":"subscribe","subscription":{"type":"bbo","coins":["BTC"]}}

Use marketTypes instead of coins to subscribe to all markets of selected types:

{"method":"subscribe","subscription":{"type":"bbo","marketTypes":["spot"]}}

ParameterTypeRequiredSourceDescription
coinsstring[]NoAlchemy extensionMarkets to subscribe to. Omit to subscribe to every market of the types in marketTypes, which defaults to perpetuals. The native API takes a single coin per subscription; the plural array is an Alchemy extension.
marketTypesstring[]NoAlchemy extensionRestricts delivery by market type. Accepted values: perp, spot, outcome, or *. Defaults to ["perp"]. Rejected if combined with coins.

The default never grows. New market types must be added to marketTypes explicitly, or pass ["*"] to opt in to future types automatically.

{"channel":"subscriptionResponse","data":{"subscriptionId":"sub_01","type":"bbo"}}

{"channel":"bbo","subscriptionId":"sub_01","blockHeight":123456,"blockTime":1780000000000,"data":{"coin":"BTC","time":1780000000000,"bbo":[{"px":"100000.0","sz":"1.25","n":3},{"px":"100001.0","sz":"0.80","n":2}]}}

FieldTypeDescription
coinstringMarket symbol.
timeintegerBlock timestamp in milliseconds.
bboarrayTwo-element tuple of [best_bid, best_ask]. Either element is null when that side has no resting orders.
bbo[].pxstringPrice, as a decimal string.
bbo[].szstringTotal size at this level, as a decimal string.
bbo[].nintegerNumber of orders at this level.

The bbo tuple always has exactly two elements. This matches the native WsBbo shape.

  • Emitted only when the best bid or the best ask changes for a market
  • Top of book only, with no depth — use l2Book for depth
  • A null element means that side of the book is empty

l2Bookl2BookDiffbbol4BookUpdates
DeliversComplete aggregated snapshotChanged aggregated levelsBest bid and ask onlyChanged individual orders
Client stateNone requiredMaintains a local bookNone requiredMaintains a local book
DetailAggregated levelsAggregated levelsTop of bookIndividual orders, with queue position
Use caseDisplays, periodic readsEfficient live bookPrice and spread trackingMarket making, queue analysis

{"method":"unsubscribe","subscription":{"type":"bbo","coins":["BTC"]}}

Every message is a complete snapshot, so there is nothing to replay. After a disconnect, resubscribe and the next message re-establishes your state.

Was this page helpful?