Balances stream
Account balances with the multiplier applied and the block it was valid at.
rhrpc.v1.Portfolio/StreamBalancesWhat it carries
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
Delivery 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.
Volume: One message per balance change on a watched account. Every record carries a dedup_key and a monotonic sequence, so at-least-once delivery is deterministic to deduplicate.
Server-side filters
- account
- token_symbols
- as_of
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.balances.stream({ fromBlock: 4_200_000,})) { handle(msg);}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"}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.