Candles stream
Session-aware OHLCV from one second to one day, corporate-action adjusted.
rhrpc.v1.Tape/StreamCandlesWhat it carries
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
Delivery 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.
Volume: One message per interval 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
- interval
- block range
- exclude_session_crossing
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.candles.stream({ fromBlock: 4_200_000,})) { handle(msg);}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}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.