Skip to content
API AccessScanner API reference

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 describe data.
  • Per-IP limit: 60 requests per minute per client IP, counted apart from the Solana explorer. See Per-IP limits.
  • Addresses: 0x plus 40 hex characters, either case. Responses use lowercase.
  • Cursors: paged routes return nextPageParams (or nextCursor for trades), a JSON object. Send it back URL-encoded in page (or cursor) 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_ERROR when the chain indexer is unavailable.

Transaction

GET /rh/explorer/tx/{hash}

One transaction, decoded and labelled.

ParameterInTypeRequiredNotes
hashpathstringyes0x plus 64 hex characters.
rawquerystringno1 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.

StatusCodeWhen
400INVALID_INPUTNot a valid transaction hash.
404NOT_FOUNDTransaction not found.

Address

GET /rh/explorer/address/{address}

A summary of any Robinhood Chain address.

ParameterInTypeRequiredNotes
addresspathstringyes0x 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.

StatusCodeWhen
400INVALID_ADDRESSNot a 0x address.

Address transactions

GET /rh/explorer/address/{address}/txs

An address's transactions, newest first.

ParameterInTypeRequiredNotes
addresspathstringyes0x address.
limitqueryintegerno1 to 100. Default 25.
pagequerystringnonextPageParams from the previous page, as JSON.
directionquerystringnoin 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).

StatusCodeWhen
400INVALID_ADDRESSNot a 0x address.
409CONFLICTThe cursor is no longer valid. Start again from the first page.

Address transfers

GET /rh/explorer/address/{address}/transfers

ERC-20 transfers in and out of an address, about 50 per page.

ParameterInTypeRequiredNotes
addresspathstringyes0x address.
pagequerystringnonextPageParams from the previous page, as JSON.
directionquerystringnoin or out.
tokenquerystringnoOnly this token's 0x address.
fromquerystringnoComma-separated senders, at most 20. - prefix excludes.
toquerystringnoComma-separated recipients, same rules.
amountquerystringnoToken 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.

StatusCodeWhen
400INVALID_ADDRESSNot a 0x address.
409CONFLICTThe cursor is no longer valid. Start again from the first page.

Address holdings

GET /rh/explorer/address/{address}/holdings

The tokens an address holds now.

ParameterInTypeRequiredNotes
addresspathstringyes0x 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.

StatusCodeWhen
400INVALID_ADDRESSNot a 0x address.

Address origin

GET /rh/explorer/address/{address}/origin

Where 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.

ParameterInTypeRequiredNotes
addresspathstringyes0x 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.

StatusCodeWhen
400INVALID_ADDRESSNot a 0x address.
429RATE_LIMITEDThe trace isn't cached and the IP's trace budget is spent.

Cached origins

POST /rh/explorer/origins

Cached 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"]}'
StatusCodeWhen
400INVALID_INPUTThe 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.

ParameterInTypeRequiredNotes
addresspathstringyesToken 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.

StatusCodeWhen
400INVALID_MINTNot a 0x address.

Token transfers

GET /rh/explorer/token/{address}/transfers

Transfers of one token, about 50 per page.

ParameterInTypeRequiredNotes
addresspathstringyesToken 0x address.
pagequerystringnonextPageParams from the previous page, as JSON.
fromquerystringnoComma-separated senders, at most 20. - prefix excludes.
toquerystringnoComma-separated recipients, same rules.
amountquerystringnoToken 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.

StatusCodeWhen
400INVALID_MINTNot a 0x address.
409CONFLICTThe cursor is no longer valid. Start again from the first page.

Token trades

GET /rh/explorer/token/{address}/trades

Buys and sells of a token, newest first, about 50 per page.

ParameterInTypeRequiredNotes
addresspathstringyesToken 0x address.
cursorquerystringnonextCursor from the previous page, as returned.
sidequerystringnobuy or sell.
minUsdquerynumbernoSmallest trade in USD.
maxUsdquerynumbernoLargest trade in USD.
walletquerystringnoOnly 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.

StatusCodeWhen
400INVALID_MINTNot a 0x address.
400INVALID_INPUTminUsd is greater than maxUsd.
409CONFLICTThe cursor is no longer valid. Start again from the first page.

Token chart

GET /rh/explorer/token/{address}/chart

Price candles for a token.

ParameterInTypeRequiredNotes
addresspathstringyesToken 0x address.
intervalquerystringno1m, 5m, 15m, 1h, 4h or 1d. Default 15m.
fromqueryintegernoStart, unix seconds. Default 24 hours ago.
toqueryintegernoEnd, 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.

StatusCodeWhen
400INVALID_MINTNot a 0x address.

Block

GET /rh/explorer/block/{number}

A block and one page of its transactions.

ParameterInTypeRequiredNotes
numberpathintegeryesBlock number.
pagequeryintegernoDefault 1.
pageSizequeryintegerno1 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.

StatusCodeWhen
400INVALID_INPUTNot a valid block number.
404NOT_FOUNDBlock not found.

Network

GET /rh/explorer/network

Current 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.

StatusCodeWhen
503INTERNAL_ERRORNetwork stats are unavailable.

Live blocks and activity

GET /rh/explorer/network/blocks
GET /rh/explorer/network/activity

The 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 }.

GET /rh/explorer/resolve

Works out what a search string is.

ParameterInTypeRequiredNotes
qquerystringyes1 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.

StatusCodeWhen
400INVALID_INPUTq is missing, empty or too long.

View this page as Markdown