Batch crypto price API: USD prices for up to 20 tokens in one call

$0.005 per call · failed calls are never charged · no account or subscription: pay per call with a card key or USDC

USD prices for up to 20 crypto tokens in one call, by ticker (ETH, BTC, USDC, AERO…) or ERC-20 0x address, on Base, Ethereum, Arbitrum or Optimism, each from its deepest Uniswap v3 pool against USDC or WETH, read live from the chain, with pool, reserve and a thin-liquidity flag. Tokens without a pool are listed under unpriced instead of failing the call. Spot prices. Use to value a basket of tokens or refresh a watchlist in one paid call.

When to use it

Guide: Token price API

Run it free (25 free calls) Buy credits by card (from $1) Example result (JSON)

Try it with your own inputs

Comma-separated tickers such as ETH,BTC,AERO (with or instead of addresses; 1-20 tokens in all)

Uses one of your 25 free calls. Nothing is charged, and a call that fails is not counted.

Inputs

NameTypeDescription
symbolsstringComma-separated tickers such as ETH,BTC,AERO (with or instead of addresses; 1-20 tokens in all)
addressesstringComma-separated 0x ERC-20 token addresses (with or instead of symbols; 1-20 tokens in all)
chainstringNetwork: base (default), eth, arb or op. One of: base, eth, arb, op.

Request

Over HTTP, with a card key from /credits:

curl -H "Authorization: Bearer adt_…" "https://tools.funwords.eu/price/tokens?symbols=ETH%2CBTC%2CAERO"

Or one of your 25 free calls, no key:

curl "https://tools.funwords.eu/price/tokens?symbols=ETH%2CBTC%2CAERO&trial=1"

Without a key, the same URL answers 402 Payment Required with x402 and MPP terms, so an agent with a wallet pays per call in USDC (Base, Polygon, Arbitrum or Solana over x402; Base or Tempo over MPP) and retries.

Example result

{
  "chain": "Base",
  "chainId": 8453,
  "ethUsd": 3850.12,
  "block": 37000000,
  "prices": [
    {
      "address": "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
      "symbol": "cbBTC",
      "decimals": 8,
      "priceUsd": 104250.5,
      "quotedIn": "USDC",
      "pool": {
        "address": "0x…",
        "feeTier": 500,
        "quoteReserve": 2500000.25,
        "quoteReserveUsd": 2500000.25
      },
      "thinLiquidity": false
    }
  ],
  "unpriced": [
    {
      "address": "0x…",
      "reason": "no Uniswap v3 pool against USDC or WETH"
    }
  ],
  "method": "Uniswap v3 spot price from the pool with the largest USDC or WETH reserve"
}

From an AI agent (MCP)

Add the MCP server to Claude, Cursor or any MCP client. This tool is price_tokens, and the first 25 successful calls are free:

https://tools.funwords.eu/mcp

Questions

Where do the prices come from?

Each token's deepest Uniswap v3 pool against USDC or WETH on the chosen chain, read live from the chain at call time. Spot prices.

What if a token has no pool?

It is listed under unpriced with the reason instead of failing the call.

How do I pay?

Each successful call costs $0.005; failed calls are not charged. The first 25 calls are free. Then pay with card credits (from $1; the key goes in an Authorization header or, for clients that can only fetch a URL, as api_key= in the URL) or per call in USDC over x402 or MPP. No account is needed.

Related tools