Stock token holders and transfers API on Robinhood Chain

Stock token holders, transfers and wallet balances on Robinhood Chain with one API key: /tokens/{token}/holders, /transfers, /balances. Not stock quotes.

Query stock token transfers, holders and balances on Robinhood Chain (chain ID 4663) with one API key.

GET /v1/data/robinhood_mainnet/tokens/{token}/transfers?standard=erc20 — lists a token's transfers
/tokens/{token}/holders — lists its holders
/addresses/{address}/balances — lists a wallet's balances

/stocks ranks tokens by daily transfers and holder_count. Chain name and ID come from GET /v1/chains. Checked

export BLOCKVECTRA_API_KEY='replace-with-your-key'

curl -sS "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks?limit=5" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
QuestionEndpointFields to read
Which stock tokens were most active, and how many holders do they have?GET /{chain}/stockstransfers, holder_count
What are one token's daily metrics for the last 30 days?GET /{chain}/stocks/{token}daily[]
What transfers did one token have?GET /{chain}/tokens/{token}/transfers?standard=erc20from, to, amount, block_number, tx_hash
Who holds one token?GET /{chain}/tokens/{token}/holdersholder, balance
What does one wallet hold?GET /{chain}/addresses/{address}/balancestoken, balance, symbol, decimals
What did one wallet send or receive of a token?GET /{chain}/addresses/{address}/transfers?standard=erc20&token=…&from_block=…&to_block=…from, to, amount, block_number

Stock tokens are ERC-20 contracts, so use standard=erc20. Amounts are decimal strings of the raw token amount; see the multiplier guide to convert them to share counts.

Data is derived from public on-chain records and is for informational purposes only. It does not constitute investment advice.

For contract deployment and event listening on Robinhood Chain, follow the RPC and WebSocket guide.

  • First step: Read the latest block without an API key using the curl command below.
  • Done when: The authenticated stocks query returns data and meta; available records include day, token, transfers and holder_count, while data: [] means no activity records are available.

Mainnet parameters and datasets.

Three-step task: query stock activity on Robinhood Chain

Find the most active tokenized stocks on the latest recorded UTC day, then read their transfer counts and holder counts.

Use one API key to query mainnet stock-token activity and holders for an activity dashboard. These are on-chain activity metrics, not stock quotes.

1. Read the latest block without an API key

curl -sS "https://api.blockvectra.com/v1/robinhood_mainnet/public" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'

The JSON-RPC result is the latest block number in hexadecimal. This public RPC call requires no key; the Data API query in step 3 requires one.

2. Create a key for the same chain

Log in to the console and open API Keys. Create a key and save the secret shown in the dialog. The same key works for JSON-RPC and the Data API on robinhood_mainnet.

For an AI Agent using HTTP without a browser, follow the Programmatic sign-up guide to sign up with an Ethereum wallet signature and create a key; do not ask the user to paste the key into chat.

3. Query stock activity with your key

Replace replace-with-your-key below with your saved key, then run the command on your server or in a local terminal. Omitting day selects the latest recorded day; limit=5 returns up to five stocks ordered by transfer activity descending.

export BLOCKVECTRA_API_KEY='replace-with-your-key'

curl -sS "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks?limit=5" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

Read these fields in the response:

FieldMeaning
data[].dayUTC date of the daily metrics.
data[].tokenStock token contract address returned by the query.
data[].symbolToken symbol.
data[].transfersNumber of on-chain transfers on that day.
data[].holder_countTotal holder address count.
meta.as_of_blockCurrent indexed head, rather than the block height of the daily metrics snapshot.
meta.refreshed_atSnapshot update time; treat the data as stale when this is null.

An empty data array means no activity records are available. To inspect a stock from the result, use its token value with GET /robinhood_mainnet/stocks/{token} as described below.

Transfers, holders and balances per token and wallet

Set TOKEN to a token value from the /stocks response and WALLET to the address you track, then run:

TOKEN='0x1111111111111111111111111111111111111111'
WALLET='0x2222222222222222222222222222222222222222'

# Transfers of one token, newest first
curl -sS "https://api.blockvectra.com/v1/data/robinhood_mainnet/tokens/$TOKEN/transfers?standard=erc20&limit=20" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

# Holders of one token, largest balance first
curl -sS "https://api.blockvectra.com/v1/data/robinhood_mainnet/tokens/$TOKEN/holders?limit=20" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

# Non-zero ERC-20 balances of one wallet
curl -sS "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/$WALLET/balances" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
  • limit defaults to 50 and is clamped to 500; pass next_cursor back unchanged as cursor to read the next page.
  • Token transfers accept optional from_block and to_block. Wallet transfers require both, and a window wider than 100,000 blocks returns 409 window_too_large unless clamp=true.
  • Holders and balances come from a snapshot refreshed every 6 hours, so rows can be about 6.5 hours old. Read the snapshot time from meta.refreshed_at; null means treat the data as stale.
  • An address without balances returns 200 with data: [].

What is the tokenized stocks dataset

The BlockVectra Data API provides daily on-chain metrics and metadata for tokenized stocks. This dataset aggregates daily transfers, mints, burns, net supply changes, holder distributions, and decentralized exchange (DEX) trading metrics, enabling developers to track public activity for tokenized stocks.

For chains that offer this dataset, see the Supported Chains page.

  • Base URL: https://api.blockvectra.com/v1/data — except for GET /chains, all Data API routes are prefixed with a chain identifier (e.g. https://api.blockvectra.com/v1/data/{chain}/…)
  • Example chain: robinhood_mainnet (used as an example path parameter; check Supported Chains for all chains offering this dataset)
  • Authentication: Provide your API key in the x-api-key: $BLOCKVECTRA_API_KEY request header
  • Billing and coverage: Metered in Compute Units (CU); only 2xx successful responses are billed. If a chain lacks stock coverage, the endpoint returns HTTP 422 no_coverage (not billed)

Daily leaderboard (GET /{chain}/stocks)

The GET /{chain}/stocks endpoint returns a daily activity leaderboard of tokenized stocks for a specified UTC date, including display metadata (symbol, name, etc.), ordered by transfer activity descending (most active tokens first).

Request parameters

  • {chain} (path parameter, required): Chain identifier (for example, robinhood_mainnet).
  • day (query parameter, optional): UTC calendar date in YYYY-MM-DD format. When omitted, defaults to the latest recorded day (if no activity is recorded, returns 200 with data: []). If provided but not a valid YYYY-MM-DD calendar date, returns HTTP 400 (error.code = "bad_request").
  • limit (query parameter, optional): Caps the number of records returned. Defaults to 50; values above 500 are clamped to 500; passing 0 or a non-integer returns HTTP 400 (error.code = "bad_request").

Pagination behavior

This endpoint is not paginated. The limit parameter caps the maximum number of records returned. In the enclosing StockDailyListEnvelope (data and meta), stock endpoints do not return next_cursor (the key is absent entirely, never null).

Code examples

Complete starter template on Robinhood Chain: blockvectra/robinhood-stock-tokens

curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks?day=2026-09-29&limit=10" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

Response structure

The response envelope is StockDailyListEnvelope, containing data and meta:

  • data (array): A list of daily leaderboard records (StockDaily), ordered by transfer activity descending (most active tokens first). Each item includes token identifiers (token, symbol, name), transfer activity (transfers, unique_senders, unique_receivers), supply metrics (mint_raw_amount, burn_raw_amount, net_supply_change), distribution metrics (holder_count, top10_holder_share_bps), DEX trading metrics (dex_swap_count, dex_raw_volume), and refresh timestamp (refreshed_at).
  • meta (object): Chain metadata (chain, chain_slug, chain_external_id, as_of_block, safe_block, finalized_block, coverage, refreshed_at). meta.refreshed_at may be null: null means the update time of this data is unknown and it should be treated as stale; block-based endpoints always return a value.

Get one tokenized stock (GET /{chain}/stocks/{token})

The GET /{chain}/stocks/{token} endpoint fetches metadata and up to 30 days of recent daily metrics for a specific tokenized stock by its token address.

Request parameters

  • {chain} (path parameter, required): Chain identifier (for example, robinhood_mainnet).
  • {token} (path parameter, required): 20-byte token contract address; 0x prefix is optional and either case is accepted (returned addresses are normalized to 0x followed by 40 lowercase hex digits). An invalid address format returns HTTP 400 (error.code = "bad_request").
  • An unknown or not-public {chain} returns HTTP 404 (error.code = "not_found", error.data.reason = "unknown_chain") before token validation. On a served chain, an unknown tokenized stock still returns HTTP 404 (error.code = "not_found").

Code examples

curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/stocks/0x1111111111111111111111111111111111111111" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"

Response structure

The response envelope is StockTokenEnvelope, containing data and meta:

  • data (object): A StockToken object containing token contract metadata (address, symbol, name, decimals, created_block, created_tx_hash, factory, creator, mint_address, burn_address, refreshed_at) and recent daily metrics array daily.
    • daily (array): An array of recent daily metrics (StockDailyMetric), up to 30 days, ordered by date descending (newest first). Each daily item shares the same metrics schema as the leaderboard above (without the redundant token, symbol, and name fields).
  • meta (object): Chain metadata object consistent with the leaderboard response.

Key return fields explained

Daily metric fields (StockDaily and StockDailyMetric)

Both the leaderboard and single-token historical daily items include the following core fields:

FieldTypeDescription
daystring (date)UTC aggregation date formatted as YYYY-MM-DD.
tokenstring (address)Token contract address (present only in leaderboard StockDaily), 40 lowercase hex characters with 0x prefix.
symbolstringToken symbol (for example, "EXMPL").
namestringToken display name; empty string "" when matching name metadata is unavailable.
transfersinteger (int64)Total number of on-chain transfers on this UTC day.
unique_sendersinteger (int64)Number of unique sender addresses that initiated transfers on this day.
unique_receiversinteger (int64)Number of unique recipient addresses that received transfers on this day.
mint_raw_amountstring (decimal)Total raw token amount minted on this day.
burn_raw_amountstring (decimal)Total raw token amount burned on this day.
net_supply_changestring (decimal)Net supply change on this day (signed decimal string, may be negative).
holder_countinteger (int64)Total holder address count.
top10_holder_share_bpsintegerShare of the top 10 holders in basis points (0–10000, 1 bps = 0.01%).
dex_swap_countinteger (int64)Number of DEX swaps involving this token on this day.
dex_raw_volumestring (decimal)Total DEX raw trading volume on this day.
refreshed_atstring (timestamp)ISO-8601 UTC timestamp of when this daily record was last refreshed.

Token metadata fields (StockToken)

When querying a single token, the outer data object contains contract metadata and recent daily metrics:

FieldTypeDescription
addressstring (address)Token contract address.
symbolstringToken symbol.
namestringFull token name.
decimalsinteger or nullToken decimals (0–255), or null if unavailable.
created_blockinteger (int64)Block number in which the token contract was created.
created_tx_hashstring (hash)Contract creation transaction hash, 64 lowercase hex characters with 0x prefix.
factorystring (address)Factory contract address.
creatorstring (address) or nullCreator address, or null if unavailable.
mint_addressstring (address) or nullMint address, or null if unavailable.
burn_addressstring (address) or nullBurn address, or null if unavailable.
dailyarrayArray of recent daily metrics (StockDailyMetric), up to 30 days, ordered by date descending (newest first).
refreshed_atstring (timestamp)ISO-8601 UTC timestamp of when token metadata was last refreshed.

Encoding conventions

The API adheres to strict encoding rules across all endpoints to preserve numerical precision and consistency:

  • Money-safety: Any value that can exceed 2^53 (256-bit integers such as mint_raw_amount, burn_raw_amount, net_supply_change, and dex_raw_volume) is serialized as a decimal string, never a JSON number and never scientific or hex notation. This prevents precision loss in runtimes like JavaScript. In JavaScript/TypeScript, parse with BigInt(str) (e.g. const net = BigInt(body.data.daily[0].net_supply_change)); in Python, parse with int(str). Counters staying well below 2^53 (transfers, unique_senders, unique_receivers, holder_count, top10_holder_share_bps, dex_swap_count, created_block) are plain JSON numbers.
  • Binary and hex values: Addresses are 0x followed by 40 lowercase hexadecimal characters; hashes are 0x followed by 64 lowercase hexadecimal characters. All returned hex values are strictly lowercase.
  • Timestamps and dates: Timestamps such as refreshed_at use YYYY-MM-DDTHH:MM:SSZ (ISO-8601 UTC with second precision). Daily aggregates (day) use plain calendar dates (YYYY-MM-DD).

Usage estimate (refreshing 50 tokens daily)

Data API queries consume Compute Units (CU) based on platform method weights. The estimate below evaluates a scenario where 50 tokens each call GET /{chain}/stocks/{token} once daily, evaluated against active method weights:

  • Method weight per call: Each data.stock call consumes 15 CU (list price $1.50 per 1M calls).
  • Refreshing 50 tokens daily (one GET /{chain}/stocks/{token} call per token, 50 calls/day): Daily consumption is 750 CU; over a 30-day cycle, this totals 1,500 calls consuming 22,500 CU, which uses approximately <0.1% of the free quota (30,000,000 CU). If exceeding the free allowance or on a paid plan, total usage at list price is about <$0.01/month.

Getting started and upgrading

The free quota is ideal for development, testing, and lightweight workloads. When your traffic expands and requires higher concurrency or more compute units, top up on-chain on the console Billing page; once confirmed on-chain and credited, the account-wide calls-per-second cap is removed. Each key remains subject to CU rate and burst limits, as described in the JSON-RPC documentation. Any unused Free Credits stay in your Credits and can still be used. For current rates and billing units, please see the Pricing page.

Frequently asked questions

Does the API return stock prices or quotes? No. The stocks endpoints return on-chain activity: transfers, mints, burns, holder counts and DEX swap counts and volume. They are not stock quotes.

Do I need an API key? Yes. The Data API requires one. The keyless public endpoint serves JSON-RPC reads only.

Are holders and balances live? No. They come from a snapshot refreshed every 6 hours, and the /stocks leaderboard from a daily table refreshed once a day, so the latest day can be missing or partial. Check meta.refreshed_at.

Is the /stocks leaderboard paginated? No. limit caps the page at 500 and no next_cursor is returned. Transfers, holders and balances are cursor-paginated.

Is the balance a share count? No. balance and amount are raw token amounts. Apply the multiplier from the multiplier guide to get underlying shares.

What happens on a chain without stock coverage? The stocks endpoints return HTTP 422 no_coverage, which is not billed.

Next steps

Last updated:

On this page