Batch crypto price API: USD prices for up to 20 tokens in one call
USD prices for up to 20 crypto tokens in one call, by ticker (ETH, BTC, LINK, AERO…) or ERC-20 0x address, on Base, Ethereum, Arbitrum and Optimism, each from its deepest Uniswap v3 pool against USDC or WETH, read live, with pool, reserve and a thin-liquidity flag. With no chain named each ticker is priced on the network that lists it. Tokens without a pool are listed as unpriced. Use to value a basket or refresh a watchlist in one paid call.
When to use it
- Value a basket of tokens or refresh a watchlist in one paid call
- Price by ticker (ETH, BTC, USDC, AERO) or ERC-20 address on Base, Ethereum, Arbitrum or Optimism
- Spot tokens with thin liquidity before relying on the price
Guide: Token price API
Inputs
| Name | Type | Description |
|---|---|---|
symbols | string | Comma-separated tickers such as ETH,BTC,AERO (with or instead of addresses; 1-20 tokens in all; an HTTP call with no input at all answers for BTC and ETH) |
addresses | string | Comma-separated 0x ERC-20 token addresses (with or instead of symbols; 1-20 tokens in all) |
chain | string | Network: 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://glyphcall.com/price/tokens?symbols=ETH%2CBTC%2CAERO"
Or one of your 3 free calls, no key:
curl "https://glyphcall.com/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.
Live result
The real answer to the request above, read 2026-11-15 19:20 UTC and refreshed every 15 minutes.
{
"chain": "Base",
"chainId": 8453,
"ethUsd": 1823.75,
"block": 57900271,
"networks": [
{
"chain": "Base",
"chainId": 8453,
"block": 57900271
}
],
"prices": [
{
"address": "0x4200000000000000000000000000000000000006",
"chain": "Base",
"symbol": "WETH",
"decimals": 18,
"priceUsd": 1823.75,
"quotedIn": "USDC",
"pool": {
"address": "0x6c561B446416E1A00E8E93E221854d6eA4171372",
"feeTier": 3000,
"quoteReserve": 29534800,
"quoteReserveUsd": 29534800
},
"thinLiquidity": false
},
{
"address": "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
"chain": "Base",
"symbol": "cbBTC",
"decimals": 8,
"priceUsd": 64938.1,
"quotedIn": "WETH",
"pool": {
"address": "0x7AeA2E8A3843516afa07293a10Ac8E49906dabD1",
"feeTier": 500,
"quoteReserve": 6436.83,
"quoteReserveUsd": 11739200
},
"thinLiquidity": false
},
{
"address": "0x940181a94A35A4569E4529A3CDfB74e38FD98631",
"chain": "Base",
"symbol": "AERO",
"decimals": 18,
"priceUsd": 0.435423,
"quotedIn": "WETH",
"pool": {
"address": "0x3d5D143381916280ff91407FeBEB52f2b60f33Cf",
"feeTier": 3000,
"quoteReserve": 153.604,
"quoteReserveUsd": 280136
},
"thinLiquidity": false
}
],
"unpriced": [],
"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://glyphcall.com/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.002; failed calls are not charged. The first 3 calls are free (25 through an MCP client). 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.