Consolidated quote stream

Synthetic best bid and offer across every venue, with aggregate depth.

RobinhoodRPC nativerhrpc.v1.Tape/StreamQuotes

What it carries

When liquidity is split across an AMM, a propAMM and two perp venues, no single venue's quote is meaningful on its own. This stream publishes the best bid and offer across all of them, which venue holds each side, and aggregate size within 10, 50 and 100 basis points of the consolidated mid.

Key fields

FieldTypeDescription
best_biddecimal stringBest bid across venues.
best_bid_venueenumWhich venue holds it.
best_askdecimal stringBest ask across venues.
spread_bpsdecimal stringConsolidated spread.
depth_10bpsdecimal stringAggregate notional within 10 bps of mid.
venues[]VenueQuotePer-venue breakdown, each with a staleness flag.A stale venue is flagged rather than silently averaged into the consolidated figure.

Delivery semantics

Emitted on change. Supply min_move_bps to receive an update only when the consolidated mid moves by at least that much.

Volume: One message per consolidated quote change, per instrument. Every record carries a dedup_key and a monotonic sequence, so at-least-once delivery is deterministic to deduplicate.

Server-side filters

  • token_symbols
  • min_move_bps

Filters are evaluated before bytes leave us, so a narrow subscription costs you nothing in bandwidth or parse time.

Subscribe

import { RobinhoodRPC } from "@robinhoodrpc/sdk"; const client = new RobinhoodRPC({ apiKey: process.env.RHRPC_KEY! }); // Backfill then live: omit toBlock to tail indefinitely.for await (const msg of client.quotes.stream({  fromBlock: 4_200_000,})) {  handle(msg);}

Sample message

{  "token_symbol": "NVDA",  "best_bid": "182.9100",  "best_bid_venue": "VENUE_RIALTO",  "best_ask": "183.0400",  "best_ask_venue": "VENUE_UNISWAP",  "mid": "182.9750",  "spread_bps": "7.1",  "depth_10bps": "412885.00",  "session": "SESSION_REGULAR",  "underlying_market_open": true}

Correctness notes

Prices in this stream are already multiplier-adjusted where the field says so. Robinhood’s own REST endpoint returns raw underlying values and Chainlink’s feed returns multiplier-adjusted ones; mixing them without applying the multiplier — or applying it twice — is the most common source of silent error on this chain.

The full set of rules is published at /docs/equities/correctness-rules.

Related streams