# Get prices for many Robinhood Chain tokens in one call

> Price up to 100 Robinhood Chain tokens in one request with the batch prices API, or get chosen profile fields for many tokens. Real responses, no key needed.

Source: https://docs.crius.sh/guides/get-prices-for-many-tokens/ · Updated 2026-10-28

Short answer

Call `GET /v1/robinhood/prices?tokens={address},{address}` (or `POST /v1/robinhood/prices` with `{"tokens": [...]}`) for up to 100 tokens. `data` is keyed by address, each with `usd`, `eth`, `change_24h_pct`, `liquidity_usd`, `confidence`, `symbol` and `logo`; unknown addresses go to `meta.missing`. For other fields, `POST /v1/robinhood/tokens/batch` returns just the profile fields you list. Both are on the anonymous plan, 1 credit per call with a key.

[GET `/prices`](https://docs.crius.sh/reference/tokens/batch-prices/) [POST `/prices`](https://docs.crius.sh/reference/tokens/batch-prices-post/) [POST `/tokens/batch`](https://docs.crius.sh/reference/tokens/batch-token-profiles/)

When you need prices for a watchlist, a portfolio or a token screener, don’t send one request per token. The batch prices endpoint prices up to 100 Robinhood Chain tokens in one call, keyed by address, with the same on-chain pricing as the single [price endpoint](https://docs.crius.sh/guides/get-token-price/) plus the 24-hour change. If you need more than prices (market cap, liquidity, holder count), batch profiles return exactly the fields you ask for.

## Price a list of tokens in one call

Example [Anonymous · no key · 1 credit](https://docs.crius.sh/reference/tokens/batch-prices/)

### Two tokenized stocks and one wrong address

What are NVDA (0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec) and TSLA (0x322f0929c4625ed5bad873c95208d54e1c003b2d) worth, and what if the list has an address that isn't a token?

GET/v1/robinhood/prices?tokens=0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec,0x322f0929c4625ed5bad873c95208d54e1c003b2d,0x000000000000000000000000000000000000beef

  

**cURL**

```bash
curl "https://api.crius.sh/v1/robinhood/prices?tokens=0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec,0x322f0929c4625ed5bad873c95208d54e1c003b2d,0x000000000000000000000000000000000000beef"
```

**JavaScript**

```js
const res = await fetch("https://api.crius.sh/v1/robinhood/prices?tokens=0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec,0x322f0929c4625ed5bad873c95208d54e1c003b2d,0x000000000000000000000000000000000000beef");
const { data, meta } = await res.json();
```

**Python**

```python
import requests

r = requests.get(
    "https://api.crius.sh/v1/robinhood/prices?tokens=0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec,0x322f0929c4625ed5bad873c95208d54e1c003b2d,0x000000000000000000000000000000000000beef",
)
body = r.json()
print(body["data"])
```

**Real response 200 Captured Oct 28, 2026 · 36 lines (arrays trimmed)**

```json
{
  "data": {
    "0x322f0929c4625ed5bad873c95208d54e1c003b2d": {
      "change_24h_pct": -0.959698,
      "confidence": "high",
      "eth": 0.171057,
      "liquidity_usd": 792587,
      "logo": null,
      "source_pool": "0x3ea70ce0b34473692549f97e630a1d82dc05cea94fa55f81b50f10c8c6d8186f",
      "symbol": "TSLA",
      "usd": 402.923
    },
    "0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec": {
      "change_24h_pct": -1.49823,
      "confidence": "high",
      "eth": 0.0909845,
      "liquidity_usd": 1415590,
      "logo": null,
      "source_pool": "0xd4eb21209c4d6093f80b5b84f5c45cc093ea14a3",
      "symbol": "NVDA",
      "usd": 214.313
    }
  },
  "meta": {
    "block": 100409724,
    "block_age_ms": 394,
    "block_ts": 1793225378000,
    "chain": "robinhood",
    "finalized_block": 100401329,
    "lag_ms": 63,
    "missing": [
      "0x000000000000000000000000000000000000beef"
    ],
    "safe_block": 100405028
  }
}
```

What this tells you

-   `data` is an object keyed by lowercase address, not an array: look tokens up by address, in any order.
-   NVDA: `usd: 214.313`, `change_24h_pct: -1.49823`. TSLA: `usd: 402.923`, `change_24h_pct: -0.959698`. Both have `confidence: "high"`.
-   TSLA’s price comes from a pool with `liquidity_usd: 792587`, NVDA’s from one with `1415590`: the 24h change and liquidity come in the same row, so you don’t need a second call.
-   `0x000000000000000000000000000000000000beef` isn’t a token, so it’s absent from `data` and listed in `meta.missing`. The status is still `200`.
-   `logo` is `null` for both stocks here; for tokens with a logo it’s an image URL you can show directly.

[Batch prices reference](https://docs.crius.sh/reference/tokens/batch-prices/) Runs from your browser on the anonymous plan [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20Two%20tokenized%20stocks%20and%20one%20wrong%20address&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fguides%2Fget-prices-for-many-tokens%2F%23stocks-and-missing%0ARequest%3A%20GET%20%2Fv1%2Frobinhood%2Fprices%3Ftokens%3D0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec%2C0x322f0929c4625ed5bad873c95208d54e1c003b2d%2C0x000000000000000000000000000000000000beef%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

## Get chosen profile fields for many tokens

Batch prices cover price, change and liquidity. For anything else in the [token profile](https://docs.crius.sh/guides/get-token-data/), send `POST /v1/robinhood/tokens/batch` with a `fields` list of dot paths. Each token comes back trimmed to those fields, with the same nesting as the full profile.

Example [Anonymous · no key · 1 credit](https://docs.crius.sh/reference/tokens/batch-token-profiles/)

### Market cap and liquidity for WETH and CHARGE

What are the symbol, price, 24h change, market cap and liquidity of WETH and Charge AI, without downloading two full profiles?

POST/v1/robinhood/tokens/batch

 

**cURL**

```bash
curl -X POST "https://api.crius.sh/v1/robinhood/tokens/batch" \
  -H "content-type: application/json" \
  -d '{"tokens":["0x7b8892cea949bc60d494681d1bc3ea96071ab0b8","0x0bd7d308f8e1639fab988df18a8011f41eacad73"],"fields":["symbol","price.usd","price.change_pct.24h","market.market_cap_usd","market.liquidity_usd"]}'
```

**JavaScript**

```js
const res = await fetch("https://api.crius.sh/v1/robinhood/tokens/batch", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    "tokens": [
      "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8",
      "0x0bd7d308f8e1639fab988df18a8011f41eacad73"
    ],
    "fields": [
      "symbol",
      "price.usd",
      "price.change_pct.24h",
      "market.market_cap_usd",
      "market.liquidity_usd"
    ]
  }),
});
const { data, meta } = await res.json();
```

**Python**

```python
import requests

r = requests.post(
    "https://api.crius.sh/v1/robinhood/tokens/batch",
    json={"tokens":["0x7b8892cea949bc60d494681d1bc3ea96071ab0b8","0x0bd7d308f8e1639fab988df18a8011f41eacad73"],"fields":["symbol","price.usd","price.change_pct.24h","market.market_cap_usd","market.liquidity_usd"]},
)
body = r.json()
print(body["data"])
```

**Real response 200 Captured Oct 28, 2026 · 40 lines (arrays trimmed)**

```json
{
  "data": {
    "0x0bd7d308f8e1639fab988df18a8011f41eacad73": {
      "market": {
        "liquidity_usd": 73135530,
        "market_cap_usd": 90409474
      },
      "price": {
        "change_pct": {
          "24h": 0.286017
        },
        "usd": 2355.49
      },
      "symbol": "WETH"
    },
    "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8": {
      "market": {
        "liquidity_usd": 5611.8,
        "market_cap_usd": 3773.42
      },
      "price": {
        "change_pct": {
          "24h": -0.171971
        },
        "usd": 0.00000388948
      },
      "symbol": "CHARGE"
    }
  },
  "meta": {
    "block": 100406780,
    "block_age_ms": 575,
    "block_ts": 1793225076000,
    "chain": "robinhood",
    "finalized_block": 100397649,
    "lag_ms": 196,
    "missing": [],
    "safe_block": 100401329
  }
}
```

What this tells you

-   The body asked for `symbol`, `price.usd`, `price.change_pct.24h`, `market.market_cap_usd` and `market.liquidity_usd`, and that’s all each row contains.
-   WETH: `market.market_cap_usd: 90409474` and `market.liquidity_usd: 73135530`. CHARGE: `market.market_cap_usd: 3773.42` and `market.liquidity_usd: 5611.8`.
-   `market.liquidity_usd` adds up all the token’s pools, so for WETH it’s far above the `liquidity_usd` of its single price pool in a batch price row (9,953,382 in the [batch prices sample](https://docs.crius.sh/reference/tokens/batch-prices/)).
-   `price.change_pct.24h` is the same number as `change_24h_pct` in batch prices: -0.171971 for CHARGE.

[Batch token profiles reference](https://docs.crius.sh/reference/tokens/batch-token-profiles/) [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20Market%20cap%20and%20liquidity%20for%20WETH%20and%20CHARGE&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fguides%2Fget-prices-for-many-tokens%2F%23batch-profiles%0ARequest%3A%20POST%20%2Fv1%2Frobinhood%2Ftokens%2Fbatch%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

## Which call to use

| Call | Returns per token | Use it for |
| --- | --- | --- |
| `GET /prices?tokens=…` | `usd`, `eth`, `change_24h_pct`, `liquidity_usd`, `confidence`, `source_pool`, `symbol`, `logo` | Watchlists, tickers, portfolio totals. Cacheable. |
| `POST /prices` | The same, with the list in a JSON body: `{"tokens": [...]}` | Long lists that don't fit in a URL. |
| `POST /tokens/batch` | Only the `fields` you list (dot paths into the profile); an empty list returns full profiles | Screeners and tables that need market cap, holders or launch status. |

All three take up to 100 tokens and cost 1 credit per call with a key. Addresses are accepted in any case and returned lowercase.

## Use it in your app

1.  **Collect the addresses you show.** A portfolio’s holdings, a watchlist, or the rows on screen.
    
2.  **Split into chunks of 100** and send one `POST /prices` per chunk.
    
3.  **Merge the `data` objects** and look each token up by its lowercase address.
    
4.  **Report `meta.missing`** instead of failing: show “no price” for those tokens.
    
5.  **Refresh on a timer or on new blocks.** Prices change every block; for live updates without polling, subscribe to the [WebSocket stream](https://docs.crius.sh/reference/stream/).
    

```js
// Price any number of tokens, 100 per request.
async function getPrices(addresses) {
  const prices = {};
  const missing = [];
  for (let i = 0; i < addresses.length; i += 100) {
    const res = await fetch("https://api.crius.sh/v1/robinhood/prices", {
      method: "POST",
      headers: { "content-type": "application/json" },
      body: JSON.stringify({ tokens: addresses.slice(i, i + 100) }),
    });
    const { data, meta } = await res.json();
    Object.assign(prices, data);
    missing.push(...meta.missing);
  }
  return { prices, missing };
}

const { prices, missing } = await getPrices([
  "0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec",
  "0x322f0929c4625ed5bad873c95208d54e1c003b2d",
]);
for (const [addr, p] of Object.entries(prices)) {
  const change = p.change_24h_pct == null ? "n/a" : `${p.change_24h_pct.toFixed(2)}%`;
  console.log(`${p.symbol} $${p.usd} (${change} 24h, ${p.confidence})`);
}
if (missing.length) console.warn("no price for", missing);
```

Without a key, mind the rate limit

Anonymous requests are limited to 2 per second per IP, so a loop of chunks can hit `429 rate_limited`. A free key raises the limit to 10 per second. See [Plans & limits](https://docs.crius.sh/plans-and-limits/).

## Frequently asked questions

**How many tokens can I price in one request?**

Up to 100 per call, for both batch prices and batch profiles. For a longer list, split it into chunks of 100. One batch call costs 1 credit with a key, however many tokens it carries.

**What happens if one of the addresses is wrong?**

The request still succeeds. Tokens Crius can't price are left out of `data` and listed in `meta.missing`, so one bad address in a portfolio doesn't break the whole call.

**Should I use GET or POST for batch prices?**

They return the same thing. GET is easy to cache and to test in a browser; use POST with a JSON body when the list would make the URL too long (100 addresses is about 4,300 characters).

**How do I value a wallet's holdings on Robinhood Chain?**

Price the wallet's tokens with one batch call and multiply each balance by `usd`. Skip or flag tokens with `confidence: "low"`: their price can't be realized at size. On the Starter plan, the [wallet profile](https://docs.crius.sh/reference/wallets/wallet-profile/) returns the holdings already valued.

## Related

[Guide **Get a token price** Get the live USD and ETH price of any Robinhood Chain token, the pool it comes from and how much to trust it, with one fast API call. Real examples, no key. Read](https://docs.crius.sh/guides/get-token-price/) [Guide **Get token data** Get a Robinhood Chain token's name, supply, price, market cap, holders, launchpad, liquidity lock and links in one API call. Real response, no API key needed. Read](https://docs.crius.sh/guides/get-token-data/) [Guide **Token screener** Build a Robinhood Chain token screener with the Crius API: clean token lists, batch profiles, a risk check per token, credits per refresh and working code. Read](https://docs.crius.sh/guides/build-a-token-screener/) [Guide **Wallet token balances** Get every token balance of a Robinhood Chain wallet (USDG, tokenized stocks, ETH) in USD in one call, one token's balances across wallets, and batch prices. Read](https://docs.crius.sh/guides/get-wallet-token-balances/) [Use case **Wallets & portfolios** What a Robinhood Chain wallet or portfolio app needs from the Crius API: holdings, USD values, PnL, trade history and warnings about spam tokens. Read](https://docs.crius.sh/use-cases/wallets-and-portfolio-apps/) [API reference **Batch prices API** Prices for up to 100 tokens in one call. Pass a comma-separated list in tokens. Read](https://docs.crius.sh/reference/tokens/batch-prices/)
