Options BBO
l2:bbo:options
Best Bid/Offer for options instruments — sent on every best bid or ask price or size change. Includes mark price, Greeks, IV, edge, and spread metrics.
Channel: l2:bbo:options:{pair}:{maturity}
Example: l2:bbo:options:ETH_USDC:31OCT25
All instruments in a maturity publish to the same channel. Use tag filtering to receive only specific instruments, strikes, or option types.
Payload
18-element positional array — instrument name at index 0. "" for unavailable values.
| Index | Type | Field | Description |
|---|---|---|---|
| 0 | string | instrument | Instrument name |
| 1 | integer | timestamp | Unix timestamp in milliseconds |
| 2 | string | bid_price | Best bid price ("" if no bids) |
| 3 | string | bid_contracts | Contracts at best bid ("" if no bids) |
| 4 | string | ask_price | Best ask price ("" if no asks) |
| 5 | string | ask_contracts | Contracts at best ask ("" if no asks) |
| 6 | string | mark_price | Mark price from IV blend ("" if unavailable) |
| 7 | string | mark_iv | Mark implied volatility ("" if unavailable) |
| 8 | string | bid_iv | Implied volatility at best bid ("" if unavailable) |
| 9 | string | ask_iv | Implied volatility at best ask ("" if unavailable) |
| 10 | string | delta | Option delta |
| 11 | string | gamma | Option gamma |
| 12 | string | vega | Option vega |
| 13 | string | theta | Option theta |
| 14 | string | rho | Option rho |
| 15 | string | edge_bid | Mark-to-bid edge ("" if unavailable) |
| 16 | string | edge_ask | Mark-to-ask edge ("" if unavailable) |
| 17 | string | spread_bps | Bid-ask spread in basis points ("" if unavailable) |
Tag Filtering
Publications carry instrument, strike, and option_type tags for server-side filtering. Without a filter, all instruments in the maturity are delivered.
| Tag | Example | Description |
|---|---|---|
instrument | ETH_USDC-31OCT25-130000-C | Filter by exact instrument |
strike | 130000 | Filter by strike price (numeric comparison supported) |
option_type | C or P | Filter by calls or puts |
Subscribe — Protobuf SDK
All instruments in a maturity
import { Centrifuge } from "centrifuge/build/protobuf";
const client = new Centrifuge("wss://staging.kyan.sh/stream/websocket?format=protobuf");
const sub = client.newSubscription("l2:bbo:options:ETH_USDC:31OCT25", { since: {} });
sub.on("publication", (ctx) => {
const data = ctx.data instanceof Uint8Array
? JSON.parse(new TextDecoder().decode(ctx.data))
: ctx.data;
const [instrument, timestamp, bidPrice, bidContracts, askPrice, askContracts, ...rest] = data;
// rest: [markPrice, markIv, bidIv, askIv, delta, gamma, vega, theta, rho, edgeBid, edgeAsk, spreadBps]
});
sub.subscribe();
client.connect();Filtered: specific instrument
const sub = client.newSubscription("l2:bbo:options:ETH_USDC:31OCT25", {
since: {},
tagsFilter: { key: "instrument", cmp: "eq", val: "ETH_USDC-31OCT25-130000-C" }
});Filtered: near-ATM calls only
const sub = client.newSubscription("l2:bbo:options:ETH_USDC:31OCT25", {
since: {},
tagsFilter: {
op: "and",
nodes: [
{ key: "option_type", cmp: "eq", val: "C" },
{ key: "strike", cmp: "in", vals: ["125000", "130000", "135000"] }
]
}
});Recovery
Subscribe with since: {} to receive the last known BBO on subscribe. On reconnect, the SDK automatically recovers.
Related channels
Channels providing related data.
| Channel | Why |
|---|---|
| Index Price | Underlying spot price. Used for moneyness calculation and mark-to-market. |
| SVI Surface | Vol surface parameters. mark_iv in BBO is derived from this surface. |
| Interest Rate | Risk-free rate input for Black-Scholes pricing. Affects forward price and rho. |
| Options L2 | Full depth behind the top-of-book prices shown here, with per-level IV. |
| Perps BBO | Perps top-of-book for the same underlying. Basis = perp mid - index. |
| Funding Rate | Funding rate on the perps instrument for the same underlying. |
| Order Lifecycle | Your order fills, cancellations, and MMP events. |
| Trades (Options) | Public options trade tape showing executions, aggressor side, and premium. |
Updated about 2 months ago
