Robinhood Chain explorer
Transactions, addresses, transfers, holdings, origin of funds, tokens, trades, charts, blocks, network stats and search resolution on Robinhood Chain.
The Robinhood Chain side of the Explorer, as JSON. Every explorer route is free.
16 routes, all under /rh/explorer. Every path below is served under https://api.scanner.net, and every request carries the key header, so those two are not repeated per route. Shared errors, limits and response formats are in Requests and errors.
- Response shape: every route returns
{ "success": true, "data": ... }. The response sections below describedata. - Per-IP limit: 60 requests per minute per client IP, counted apart from the Solana explorer. See Per-IP limits.
- Addresses:
0xplus 40 hex characters, either case. Responses use lowercase. - Cursors: paged routes return
nextPageParams(ornextCursorfor trades), a JSON object. Send it back URL-encoded inpage(orcursor) exactly as you received it. A malformed cursor starts again from the first page. - Route errors: besides the errors below, any route can return
502 UPSTREAM_ERRORwhen the chain indexer is unavailable.
Transaction
GET /rh/explorer/tx/{hash}One transaction, decoded and labelled.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
hash | path | string | yes | 0x plus 64 hex characters. |
raw | query | string | no | 1 or true adds raw, with the transaction, internal transactions and logs as the indexer returned them. |
curl "https://api.scanner.net/rh/explorer/tx/0xTX_HASH" \
-H "x-api-key: $SCANNER_API_KEY"Response: a RobinhoodExplorerTransactionDetail. Key fields: txHash, blockNumber, blockTime (or null while pending), status, error, from, to, createdContract, value, valueUsd, fee, feeUsd, gasUsed, method, decodedInput, actions, tokenTransfers, nativeTransfers, internalTxs, logs, balanceChanges, tokens and identities.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_INPUT | Not a valid transaction hash. |
| 404 | NOT_FOUND | Transaction not found. |
Address
GET /rh/explorer/address/{address}A summary of any Robinhood Chain address.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | 0x address. |
curl "https://api.scanner.net/rh/explorer/address/0xADDRESS" \
-H "x-api-key: $SCANNER_API_KEY"Response: address, ethBalance, ethUsdValue, detection (isToken, isContract, isWallet, contractName), identity, isVerified, token when it is a token, txCount and cachedScan.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_ADDRESS | Not a 0x address. |
Address transactions
GET /rh/explorer/address/{address}/txsAn address's transactions, newest first.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | 0x address. |
limit | query | integer | no | 1 to 100. Default 25. |
page | query | string | no | nextPageParams from the previous page, as JSON. |
direction | query | string | no | in or out. |
curl "https://api.scanner.net/rh/explorer/address/0xADDRESS/txs?limit=50" \
-H "x-api-key: $SCANNER_API_KEY"Response: transactions (each with txHash, blockNumber, blockTime, from, to, value, fee, method, status and direction) and nextPageParams (null at the end).
| Status | Code | When |
|---|---|---|
| 400 | INVALID_ADDRESS | Not a 0x address. |
| 409 | CONFLICT | The cursor is no longer valid. Start again from the first page. |
Address transfers
GET /rh/explorer/address/{address}/transfersERC-20 transfers in and out of an address, about 50 per page.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | 0x address. |
page | query | string | no | nextPageParams from the previous page, as JSON. |
direction | query | string | no | in or out. |
token | query | string | no | Only this token's 0x address. |
from | query | string | no | Comma-separated senders, at most 20. - prefix excludes. |
to | query | string | no | Comma-separated recipients, same rules. |
amount | query | string | no | Token amount range, min-max. |
curl "https://api.scanner.net/rh/explorer/address/0xADDRESS/transfers?direction=in" \
-H "x-api-key: $SCANNER_API_KEY"Response: transfers (each with txHash, blockNumber, blockTime, token (address, symbol, name, decimals, priceUsd), amount, from, to and direction) and nextPageParams.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_ADDRESS | Not a 0x address. |
| 409 | CONFLICT | The cursor is no longer valid. Start again from the first page. |
Address holdings
GET /rh/explorer/address/{address}/holdingsThe tokens an address holds now.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | 0x address. |
curl "https://api.scanner.net/rh/explorer/address/0xADDRESS/holdings" \
-H "x-api-key: $SCANNER_API_KEY"Response: holdings (each with token, amount, priceUsd and usdValue) and totalUsdValue.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_ADDRESS | Not a 0x address. |
Address origin
GET /rh/explorer/address/{address}/originWhere an address's money came from, walked back to the first labelled entity, up to 10 hops. It works like the Solana origin, including the per-IP budget for traces that aren't cached.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | 0x address. |
curl "https://api.scanner.net/rh/explorer/address/0xADDRESS/origin" \
-H "x-api-key: $SCANNER_API_KEY"Response: the same fields as the Solana origin, with three differences: hops carry txHash instead of signature, terminalReason is never loop, and label can be E, PE or Proxy.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_ADDRESS | Not a 0x address. |
| 429 | RATE_LIMITED | The trace isn't cached and the IP's trace budget is spent. |
Cached origins
POST /rh/explorer/originsCached origin labels for up to 30 addresses. It never starts a trace. Same body and response as the Solana route, with 0x addresses.
curl -X POST "https://api.scanner.net/rh/explorer/origins" \
-H "x-api-key: $SCANNER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"addresses":["0xADDRESS"]}'| Status | Code | When |
|---|---|---|
| 400 | INVALID_INPUT | The body has no non-empty addresses array of strings. |
Token
GET /rh/explorer/token/{address}A token's metadata, market stats, security flags, pools and top holders.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | Token 0x address. |
curl "https://api.scanner.net/rh/explorer/token/0xTOKEN_ADDRESS" \
-H "x-api-key: $SCANNER_API_KEY"Response: a RobinhoodExplorerTokenOverview: address, metadata, stats (including priceUsd, priceEth and liquidityBasis), security (isVerified, isStockToken, isMintable, hasOwner, ownerAddress, totalSupply, top10HolderPct, risks), pools, creator, createdAt, topHolders (up to 100) and cachedContractScan.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_MINT | Not a 0x address. |
Token transfers
GET /rh/explorer/token/{address}/transfersTransfers of one token, about 50 per page.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | Token 0x address. |
page | query | string | no | nextPageParams from the previous page, as JSON. |
from | query | string | no | Comma-separated senders, at most 20. - prefix excludes. |
to | query | string | no | Comma-separated recipients, same rules. |
amount | query | string | no | Token amount range, min-max. |
curl "https://api.scanner.net/rh/explorer/token/0xTOKEN_ADDRESS/transfers" \
-H "x-api-key: $SCANNER_API_KEY"Response: the same shape as Address transfers.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_MINT | Not a 0x address. |
| 409 | CONFLICT | The cursor is no longer valid. Start again from the first page. |
Token trades
GET /rh/explorer/token/{address}/tradesBuys and sells of a token, newest first, about 50 per page.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | Token 0x address. |
cursor | query | string | no | nextCursor from the previous page, as returned. |
side | query | string | no | buy or sell. |
minUsd | query | number | no | Smallest trade in USD. |
maxUsd | query | number | no | Largest trade in USD. |
wallet | query | string | no | Only this wallet's trades. |
curl "https://api.scanner.net/rh/explorer/token/0xTOKEN_ADDRESS/trades?side=sell" \
-H "x-api-key: $SCANNER_API_KEY"Response: trades (each with txHash, wallet, type, amountToken, quote, amountUsd, priceUsd and time in unix milliseconds), nextCursor and stillMore.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_MINT | Not a 0x address. |
| 400 | INVALID_INPUT | minUsd is greater than maxUsd. |
| 409 | CONFLICT | The cursor is no longer valid. Start again from the first page. |
Token chart
GET /rh/explorer/token/{address}/chartPrice candles for a token.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
address | path | string | yes | Token 0x address. |
interval | query | string | no | 1m, 5m, 15m, 1h, 4h or 1d. Default 15m. |
from | query | integer | no | Start, unix seconds. Default 24 hours ago. |
to | query | integer | no | End, unix seconds. |
curl "https://api.scanner.net/rh/explorer/token/0xTOKEN_ADDRESS/chart?interval=1h" \
-H "x-api-key: $SCANNER_API_KEY"Response: { "interval", "points": [{ "t", "open", "high", "low", "close", "volume" }] }, with t in unix seconds.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_MINT | Not a 0x address. |
Block
GET /rh/explorer/block/{number}A block and one page of its transactions.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
number | path | integer | yes | Block number. |
page | query | integer | no | Default 1. |
pageSize | query | integer | no | 1 to 100. Default 25. |
curl "https://api.scanner.net/rh/explorer/block/BLOCK_NUMBER?pageSize=50" \
-H "x-api-key: $SCANNER_API_KEY"Response: blockNumber, blockHash, parentHash, blockTime, miner, gasUsed, gasLimit, baseFeeGwei, txCount, transactions (this page), page, pageSize, totalPages, and truncated when not every transaction could be loaded.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_INPUT | Not a valid block number. |
| 404 | NOT_FOUND | Block not found. |
Network
GET /rh/explorer/networkCurrent Robinhood Chain network stats. No parameters.
curl "https://api.scanner.net/rh/explorer/network" \
-H "x-api-key: $SCANNER_API_KEY"Response: blockNumber, avgBlockTimeMs, gasPriceGwei, tps, ethPriceUsd, totalTransactions, totalAddresses, recentBlocks and history.
| Status | Code | When |
|---|---|---|
| 503 | INTERNAL_ERROR | Network stats are unavailable. |
Live blocks and activity
GET /rh/explorer/network/blocks
GET /rh/explorer/network/activityThe 5 latest blocks, and up to 50 latest blocks with recent transactions. No parameters. Responses aren't cached.
curl "https://api.scanner.net/rh/explorer/network/activity" \
-H "x-api-key: $SCANNER_API_KEY"Response: /network/blocks returns a list of recent blocks. /network/activity returns { blocks, transactions, tps }.
Resolve a search
GET /rh/explorer/resolveWorks out what a search string is.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
q | query | string | yes | 1 to 100 characters: a transaction hash, address, block number or truncated address. ENS names are not resolved. |
curl "https://api.scanner.net/rh/explorer/resolve?q=0xADDRESS" \
-H "x-api-key: $SCANNER_API_KEY"Response: { "kind", "value" }. kind is tx, address, token, block, partial (look it up with the wallet finder) or unknown.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_INPUT | q is missing, empty or too long. |