Token Supply
token_supplyLatest SUPPLY only (total / circulating / max), market cap and FDV for ONE token or a BATCH of up to 50 tokens by address (+ optional chain). Use when the user asks ONLY about supply / market cap, not price. Does NOT return price / OHLC / volume — use token_price for the current price, token_ohlcv for a series; for a well-known coin with no chain pinned use currency_supply.
Backed by Bitquery's DEX index across Ethereum, Arbitrum, Base,
Matic, Optimism, Binance Smart Chain, Tron, Solana, Robinhood and Arc — works for
rare / long-tail / newly-launched tokens. Use find_tokens /
find_token_by_address first if you only have a symbol and need
to resolve the correct address + blockchain.
BATCH: several addresses (up to 50, separated by |, , or spaces). Every
row carries Addresses_Requested, Addresses_Invalid and Addresses_Used; the
rule is in the address parameter; Addresses_Not_Found lists the
addresses looked up that returned no row ([] when every one was found;
when nothing is found the result is empty, so no row carries the list).
One row per (address,
chain), in the order given; an address with no trade in the last 7 days
returns no row. With blockchain empty every chain the address trades on
gets its own row. An empty address is the chain's native coin (see that
parameter; on Solana wrapped SOL, on Arc none).
VALUATION PRICE — Market_Cap_Usd and Fdv_Usd are
Valuation_Price_Usd x the supply, so every valuation in a row can be
recomputed from a price in the same row. Valuation_Price_Usd is the
average price of the newest hour in which real volume changed hands, NOT
the latest single swap: one odd or tiny swap prints a price nobody could
trade at, and an hour can close with no real volume behind it at all, which
was putting valuations out by a factor of thousands.
It can therefore differ from the Last_Price_Usd that token_price returns
for the same token — that one is the latest swap. Quote
Valuation_Price_Usd whenever you quote a market cap or an FDV.
The same basis is used by token_price, token_supply, currency_price,
currency_supply, find_tokens, find_token_by_address,
trending_tokens, new_tokens and launch_cohort, so a valuation does
not change from one of them to the next. Which hour counts as real volume
is judged against the volume of the period a tool reads, so a tool that
looks further back can pick an older hour than one reading only the last
few hours; for something whose recent trading is thin the two valuations
can differ, and the wider one is the better-supported figure.
MARKET CAP vs FDV — Market_Cap_Usd is circulating-supply based and is
returned ONLY when a circulating supply is actually known for the token;
otherwise it is null. Most long-tail tokens have no circulating-supply
figure, so null is normal and does NOT mean the token is untraded — read
Fdv_Usd (the total-supply valuation) instead, and call it FDV, never
"market cap". Fdv_Usd is itself null when even the total supply is
unknown — then no valuation at all is available for this token, and
Total_Supply / Circulating_Supply are null too. A supply figure
that is not known is always null (unknown), never 0. A circulating
supply reported above the total supply is capped at the total, and the
market cap then equals the FDV.
BOTH valuations (token and Asset_* alike) are additionally WITHHELD (null,
with a non-empty Valuation_Warning) when the supply behind them is not credible: a supply
far larger than any real token, or a resulting valuation larger than any
plausible market. Mint-and-burn tokens report exactly that — supply parked
on a burn address (0x…dead, 0x0) still counts in Total_Supply, so the
raw valuation lands many orders of magnitude above anything real. When
Valuation_Warning is set, report the valuation as unavailable and say
why — do NOT rebuild it yourself from supply x price. To see how much of
the supply is burned, call the chain's <chain>_token_holders tool
(chain_capabilities lists the chains that have one).
TOKEN vs ASSET — Total_Supply, Circulating_Supply, Max_Supply,
Market_Cap_Usd and Fdv_Usd are THIS token's own figures. They are null
for a token that stands for a multi-chain or bridged asset (WETH, WBTC,
USDC, LINK on each of its chains, ETH on a layer-2): the data holds only
the whole asset's supply for it. Asset_Currency_Id, Asset_Total_Supply,
Asset_Circulating_Supply, Asset_Market_Cap_Usd and Asset_Fdv_Usd always
hold the whole asset's figures (equal to the token's own when the token is
its own asset) — use them for "market cap of USDC / WETH" and say they are
the asset's. When the asset exists on one chain only (e.g. PUMP),
Asset_Fdv_Usd is effectively this token's FDV. A bridged copy listed
under its own id but carrying the asset's supply also gets a
Valuation_Warning.
Symbol_NonAscii = 1 flags a Token_Symbol that is not plain ASCII. That
is normal for CJK / emoji token names, but it is also how a scam token
impersonates a major one: Cyrillic or Greek look-alike letters make a fake
USDT / SOL / BTC read identically to a human. Never treat such a
token as the asset it resembles — say the symbol is a look-alike.
IF THE USER IS ASKING ABOUT A WELL-KNOWN CRYPTOCURRENCY (USDC, USDT,
WETH, WBTC, BTC, ETH, SOL, DAI, …) AND HAS NOT PINNED A SPECIFIC
BLOCKCHAIN OR CONTRACT, prefer currency_supply instead — it
aggregates every token of that asset across every indexed chain and
gives wider coverage than this single-contract query.
Names longer than 128 characters and symbols longer than 32 are cut and end
in … (spam tokens carry names of up to 34,000 characters).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"address": "<address>"
},
"name": "token_supply"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Token contract / mint address, or several. Up to 50 addresses, separated by `|`, `,` or spaces. An empty entry (a leading, trailing or doubled separator) is ignored - it counts neither as requested nor as invalid. EVM addresses (0x + 40 hex characters) are matched case-insensitively; Solana (32-44 base58 characters) and Tron (base58 starting with T) addresses are case-sensitive. Every row carries Addresses_Requested (distinct entries; duplicates and differently-cased EVM addresses count once), Addresses_Invalid (entries that are not an address of the requested chain, or of any chain when none is requested — skipped, never looked up) and Addresses_Used (addresses looked up, at most 50); valid addresses after the 50th are ignored, so when Addresses_Used + Addresses_Invalid is below Addresses_Requested, call again with the rest. A value without any well-formed address is refused; one whose well-formed addresses all belong to another chain than the requested one is answered with an error. Empty (or only separators) = the chain's native coin — pass blockchain with it. ETH, BNB, MATIC and TRX come back with an empty Token_Address (as find_tokens returns them); on Solana the row is wrapped SOL (So11111111111111111111111111111111111111112, symbol WSOL, SOL's price); Arc has no native-coin row (its gas token USDC is the token 0x3600000000000000000000000000000000000000) and is answered with an error. | |
| blockchain | No | Token_Network — Ethereum (eth), Arbitrum (arb, arbitrum one), Base, Matic (polygon, polygon pos), Optimism (op, op mainnet), Binance Smart Chain (bsc, bnb, bnb chain, bnb smart chain), Tron (trx), Solana (sol), Robinhood (rh) or Arc (arc network, circle arc); case-insensitive, any other value is rejected. Applies to every address in the call. Empty (default) = every chain, one row per chain the address trades on. |