Stream catalogue

Every stream. Every method. Every field.

The complete inventory of what the feeds carry: proto methods, compatibility, field-by-field specs, filters, snapshot semantics, sample messages, and honest volume notes. If a field is not listed here, we do not stream it.

grpc.robinhoodrpc.io:443
  • robinhoodrpc.*QuickNode-compatible
  • robinhoodrpc_l1_gateway.v2Dwellir-compatible
  • robinhoodrpc_swaps.v1native schema
  • robinhoodrpc_btc_price.v1native schema

Consolidated tape

RobinhoodRPC native
rhrpc.v1.Tape/StreamTape

One ordered stream of every trade on Robinhood Chain — Uniswap, Rialto, Lighter, Arcus, Morpho liquidations and RFQ fills — normalized into a single record type. Each print carries price in both token and underlying-share terms, the multiplier that converts between them, the market session, and the premium against the underlying snapshotted at execution.

Key fields
FieldTypeDescription
tape_sequenceuint64Monotonic across the whole tape.Two consumers replaying the same range get identical order. This is what makes it a tape rather than a feed.
venueenumWhich venue printed it.
pricedecimal stringUSD per token, corporate-action adjusted.
price_per_sharedecimal stringUSD per underlying share.Both representations, always. Publishing one guarantees a class of errors.
premium_bps_at_printdecimal stringDivergence from the underlying at execution time.
sessionenumREGULAR, PRE_MARKET, POST_MARKET, OVERNIGHT, WEEKEND, HOLIDAY, HALTED.
confirmation_stateenumSEQUENCED, INCLUDED, FINALIZED, DROPPED, REORGED.
paired_leg_assetstring?The counter-leg when a stock leg and cash leg share a transaction.
Server-side filters
  • token_symbols
  • venues
  • kinds (spot, perp, liquidation, mint, redeem, RFQ)
  • min_size_usd
  • block range (backfill then live)
Semantics

Backfill and live through one stream: supply a from_block and omit to_block to replay history then tail indefinitely. Resumable by cursor — reconnect with the last cursor and delivery continues without a gap. At-least-once with an explicit dedup key.

Sample message
{  "tape_sequence": "88214417",  "token_symbol": "AAPL",  "venue": "VENUE_UNISWAP",  "kind": "TRADE_KIND_SPOT_SWAP",  "side": "SIDE_BUY",  "price": "231.4400",  "price_per_share": "231.4400",  "multiplier": "1.000000",  "size_tokens": "18.25",  "size_usd": "4223.78",  "session": "SESSION_REGULAR",  "underlying_market_open": true,  "premium_bps_at_print": "14.2",  "block_number": 4512889,  "confirmation_state": "CONFIRMATION_STATE_INCLUDED"}

Volume: Volume scales with chain activity; the chain produces a block roughly every 100 ms.

Read the Consolidated tape guide

Consolidated quote

RobinhoodRPC native
rhrpc.v1.Tape/StreamQuotes

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.
Server-side filters
  • token_symbols
  • min_move_bps
Semantics

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

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}

Volume: One message per consolidated quote change, per instrument.

Read the Consolidated quote guide

Price reconciliation

RobinhoodRPC native
rhrpc.v1.EquitiesStream/StreamPrices

Four prices exist for every stock token and they disagree by construction: Robinhood's raw underlying REST price, Chainlink's multiplier-adjusted oracle, Chainlink Data Streams, and observed DEX spot. This stream carries all four with their observation times and staleness, plus the premium between the onchain price and the underlying — the number no other provider on this chain publishes.

Key fields
FieldTypeDescription
underlying_middecimal stringFrom Robinhood REST.RAW underlying. Multiply by the multiplier before comparing to anything onchain.
oracle_pricedecimal stringChainlink feed.ALREADY multiplier-adjusted. Applying uiMultiplier() to this squares the multiplier.
dex_middecimal stringConsolidated onchain mid.
multiplierdecimal stringUsed for every conversion in the record.
premium_bpsdecimal string(dex_mid − underlying_mid × multiplier) ÷ (underlying_mid × multiplier) × 10000.
flags[]enumSTALE_ORACLE, TRADING_HALTED, SESSION_CLOSED, WIDE_SPREAD, CONTRACT_PAUSED, THIN_LIQUIDITY, MULTIPLIER_PENDING.
oracle_staleness_msuint64How old the oracle round is.
Server-side filters
  • token_symbols
  • min_premium_change_bps
Semantics

Sources have different cadences — a 15-second REST cache, an oracle heartbeat, sub-second Data Streams, and per-block DEX observation. Each input is stamped with its own observation time and staleness rather than being treated as simultaneous.

Sample message
{  "token_symbol": "TSLA",  "session": "SESSION_OVERNIGHT",  "underlying_market_open": false,  "underlying_mid": "402.1800",  "oracle_price": "402.6100",  "oracle_staleness_ms": 42180,  "dex_mid": "405.9200",  "multiplier": "1.000000",  "premium_bps": "92.9",  "flags": ["DIVERGENCE_FLAG_SESSION_CLOSED"]}

Volume: Emitted on change, per instrument.

Read the Price reconciliation guide

Corporate actions

RobinhoodRPC native
rhrpc.v1.EquitiesStream/StreamCorporateActions

Merges Robinhood's corporate-actions endpoint, the pending-multiplier fields on /assets, and onchain UIMultiplierUpdated events into one ordered lifecycle per action. All 13 action types are typed, and the pause window that precedes a large multiplier change is emitted ahead of effect rather than discovered afterwards.

Key fields
FieldTypeDescription
action_idstringStable across the lifecycle. Dedupe on this.
typeenumFORWARD_SPLIT, REVERSE_SPLIT, CASH_DIVIDEND, STOCK_DIVIDEND, SPIN_OFF, three merger variants, REDEMPTION, NAME_CHANGE, WORTHLESS_REMOVAL, RIGHTS_DISTRIBUTION, UNIT_SPLIT.
stageenumACTION_ANNOUNCED, MULTIPLIER_PENDING, PAUSE_SCHEDULED, PAUSED, MULTIPLIER_APPLIED, UNPAUSED, ACTION_COMPLETED.PAUSE_SCHEDULED is the one that matters: a knowable, advance-warned price discontinuity.
seconds_until_effectiveint64Countdown; negative once applied.
old_multiplier / new_multiplierdecimal stringThe change.
detailsoneofExactly one variant, matching type.
Server-side filters
  • token_symbols
  • stages
  • replay_in_progress
Semantics

Set replay_in_progress to receive actions already in flight on connect, so a new subscriber is never blind to a pause window that has already been scheduled.

Sample message
{  "action_id": "0x9f2c…",  "token_symbol": "NVDA",  "type": "CORPORATE_ACTION_TYPE_FORWARD_SPLIT",  "stage": "LIFECYCLE_STAGE_PAUSE_SCHEDULED",  "effective_at": "2026-09-14T20:00:00Z",  "seconds_until_effective": 14400,  "old_multiplier": "1.004200",  "new_multiplier": "4.016800",  "details": {    "forward_split": {      "underlying_symbol": "NVDA",      "old_rate": "1",      "new_rate": "4"    }  }}

Volume: Low volume, high value. Most instruments see a handful of events per quarter.

Read the Corporate actions guide

Transactions

RobinhoodRPC native
rhrpc.v1.ChainStream/StreamTransactions

Typed transactions with Arbitrum Nitro fields that generic EVM providers drop: type codes 100–106, requestId on parent-to-child transactions, and address aliasing exposed as both from and unaliasedFrom. Set include_unconfirmed to receive records at SEQUENCED, before block inclusion.

Key fields
FieldTypeDescription
tx_typeenumIncludes Arbitrum types 100–106.
request_iduint256?Inbox queue position for cross-chain transactions.
from_is_aliasedboolTrue when from is an aliased L1 sender.unaliasedFrom carries the original. Providers that drop this misattribute cross-chain activity.
confirmation_stateenumSEQUENCED through FINALIZED, plus DROPPED and REORGED.
Server-side filters
  • from
  • to
  • block range
  • include_unconfirmed
Semantics

Every SEQUENCED record reaches a terminal state — INCLUDED, DROPPED or REORGED. A pre-confirmation is never left unresolved.

Sample message
{  "hash": "0x7a1e…",  "block_number": 4512889,  "from": "0x2f9b…",  "to": "0xc41d…",  "tx_type": "ARBITRUM_TX_TYPE_DYNAMIC_FEE",  "from_is_aliased": false,  "confirmation_state": "CONFIRMATION_STATE_SEQUENCED"}

Volume: Scales with chain activity.

Read the Transactions guide

Logs

Standard EVM
rhrpc.v1.ChainStream/StreamLogs

Standard EVM log filtering by address and topic, evaluated server-side before bytes leave us. Logs from contracts with a known ABI arrive decoded into typed events alongside the raw data.

Key fields
FieldTypeDescription
addressaddressEmitting contract.
topics[]hash[]Indexed topics.
decodedDecodedEvent?Typed name, signature and parameters.
removedboolTrue when removed by a reorg.
Server-side filters
  • addresses
  • topics (positional, any-of)
  • block range
  • include_unconfirmed
Semantics

Compatible with the standard eth_subscribe logs shape, so existing tooling works unmodified. Reorgs are additionally emitted as explicit REORGED records rather than only setting removed.

Sample message
{  "address": "0xc41d…",  "topics": ["0xddf252ad…", "0x0000…2f9b", "0x0000…88a1"],  "block_number": 4512889,  "decoded": {    "name": "Transfer",    "signature": "Transfer(address,address,uint256)",    "params": [      { "name": "from", "type": "address", "value": "0x2f9b…", "indexed": true },      { "name": "to", "type": "address", "value": "0x88a1…", "indexed": true },      { "name": "value", "type": "uint256", "value": "18250000000000000000" }    ]  }}

Volume: Depends entirely on your filter breadth.

Read the Logs guide

Blocks

Standard EVM
rhrpc.v1.ChainStream/StreamBlocks

Block headers carrying l1BlockNumber, sendCount and sendRoot alongside the standard fields. On Nitro, extraData equals sendRoot and mixHash encodes sendCount and l1BlockNumber — surfacing them properly avoids a class of misinterpretation.

Key fields
FieldTypeDescription
numberuint64Block height.
l1_block_numberuint64First non-Arbitrum ancestor block.
send_countuint256L2-to-L1 messages sent as of this block.
send_roothashMerkle root of outgoing messages.
Server-side filters
  • block range
  • include_unconfirmed
Semantics

Backfill and live through one stream. Resumable by cursor.

Sample message
{  "number": 4512889,  "hash": "0x41bb…",  "timestamp": "2026-08-27T14:22:09.118Z",  "l1_block_number": 21884412,  "send_count": "88214",  "send_root": "0x9ac2…",  "confirmation_state": "CONFIRMATION_STATE_INCLUDED"}

Volume: Roughly ten per second at a 100 ms block time.

Read the Blocks guide

Candles

RobinhoodRPC native
rhrpc.v1.Tape/StreamCandles

Candles built from the consolidated tape rather than a single venue. Any candle spanning a market-session boundary is flagged, and candles containing a corporate action are restated onto the post-action multiplier with the responsible action id attached.

Key fields
FieldTypeDescription
intervalenum1s, 5s, 1m, 5m, 15m, 1h, 4h, 1d.
open / high / low / closedecimal stringCorporate-action adjusted.
vwapdecimal stringVolume-weighted average price.
crosses_session_boundaryboolTrue when this candle spans more than one session.Every OHLCV series published on this chain today silently mixes regimes. Filter on this.
corporate_action_adjustedboolOHLC restated; adjusting_action_id names why.
Server-side filters
  • token_symbols
  • interval
  • block range
  • exclude_session_crossing
Semantics

Aggregation happens within a session, not across it. VWAP computed across a session boundary is not a meaningful number and we do not produce one silently.

Sample message
{  "token_symbol": "AAPL",  "interval": "INTERVAL_1M",  "open_time": "2026-08-27T14:22:00Z",  "open": "231.1900",  "high": "231.6200",  "low": "231.0400",  "close": "231.4400",  "volume_usd": "884120.55",  "vwap": "231.3812",  "session": "SESSION_REGULAR",  "crosses_session_boundary": false,  "corporate_action_adjusted": false}

Volume: One message per interval per instrument.

Read the Candles guide

Balances

RobinhoodRPC native
rhrpc.v1.Portfolio/StreamBalances

Balance updates for watched accounts, always carrying both the raw ERC-20 amount and the underlying-share equivalent, plus the multiplier used and its effective block. A consumer can always check the arithmetic.

Key fields
FieldTypeDescription
balance_rawuint256Static across corporate actions, by design.
balance_uidecimal stringbalance_raw × multiplier.
multiplier_applieddecimal stringThe multiplier actually used.Never the current one when as_of is in the past.
multiplier_effective_blockuint64When that multiplier became valid.
Server-side filters
  • account
  • token_symbols
  • as_of
Semantics

Historical requests require an as_of block or timestamp. There is no code path that quietly applies today's multiplier to a past balance.

Sample message
{  "account": "0x2f9b…",  "token_symbol": "NVDA",  "balance_raw": "12500000000000000000",  "balance_ui": "50.2100",  "multiplier_applied": "4.016800",  "multiplier_effective_block": 4310000,  "as_of_block": 4512889,  "value_usd": "9186.42"}

Volume: One message per balance change on a watched account.

Read the Balances guide

Across every stream

Cross-cutting features

These apply to every surface above. They are properties of the platform, not of individual streams.

Backfill and live, one interface

Supply a from_block and omit to_block to replay history then tail indefinitely. No second pipeline, no schema fork between historical and real-time.

Resumable by cursor

Reconnect with the last cursor you received and delivery continues without a gap. A dropped connection never creates an undetectable hole.

Server-side filtering

Addresses, topics, venues, instruments, sizes and change thresholds are evaluated before bytes leave us.

At-least-once with dedup keys

Every record carries an explicit dedup key and a monotonic sequence, so consumers dedupe deterministically instead of guessing.

Reorgs as events

A reorg is emitted as an explicit REORGED record with compensating writes on the same dedup key — not silently corrected upstream where your audit log cannot see it.

Provenance on every field

Source, block, observation time and the code version that produced the record, so a disagreement with another vendor is diagnosable.

Found the fields you need?

Every stream on this page is on both plans. Subscribe in under a minute.