Price At
price_atUSD PRICE AT A PAST MOMENT - what a token or coin was worth when a transfer happened: up to 500 (asset, time) pairs on ONE chain per call. Use it to value transfers, fees and holdings at the time they occurred (tax and accounting reports, cost basis), years back. NOT a time series - use token_ohlcv / currency_ohlcv; NOT the latest price - use token_price / currency_price.
chain is exactly one of: eth, bsc, matic (Polygon), arbitrum, base, optimism, robinhood,
arc, tron, solana, btc, zec, ltc, doge, dash, bch, xrp, xlm, ada (lower case; any other
spelling is refused). items is a list of asset@time pairs separated by "|", for example
native@2025-01-15 12:00:00|0xdac17f958d2ee523a2206206994597c13d831ec7@1736942400. The asset
is a token contract (EVM 0x-hex, Tron base58, Solana mint) or the word native for the chain's
own coin; the time is UTC, as YYYY-MM-DD HH:MM:SS or 10-digit unix seconds (up to
4294967295). Identify a token by its contract, never by its symbol.
What is covered: on the EVM chains the native coin and tokens by contract, years of history, a price every 5 minutes for the native coin and the largest tokens and ONE price per UTC day for every other token. On tron TRX and about 200 major tokens, one price per day. On solana SOL and several thousand of the most traded mints, a price every 10 minutes, and no price when the token did not trade in the hour before. On btc, zec, ltc, doge, dash, bch, xrp, xlm and ada the native coin only, hourly, back to 2013-2017; tokens issued on those chains are not priced. USDC on Arc (the native coin and 0x3600...0000) is priced as USDC on Ethereum: ask chain=eth with the contract the Note gives.
One row per pair, in the order given - a pair given twice is answered twice, so row N always answers pair N: Price_Usd and Status - ok; no_price (Note says why - nothing recorded, a future time, an invalid or out-of-range date, an asset this chain does not price); stale (the price had not changed for 2 days, or for 1 hour on an asset priced every 5 minutes - the token had probably stopped trading, do not treat it as a market price); suspect (more than twice, or less than half, the price a day earlier AND a day later - a data glitch, check before using); depeg (USDT, USDC or DAI outside 0.98-1.02). A missing price is never 0 and never today's price - report it as unpriced, do not fill it in. Resolution is how fine the price is (5m, 10m, 1h, 1d); Source is dex (on-chain trades) or vendor (market feed); Fill (vendor only) is origin, interpolate or extrapolate. Price_Time and Age_Seconds say which price point answered: always on the vendor chains (the hour), with with_age=1 on the EVM chains and tron. Up to 500 pairs; pairs after the 500th are ignored - compare Items_Requested with Items_Used.
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": {
"chain": "<chain>",
"items": "<items>"
},
"name": "price_at"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain of every pair in this call, exactly one of: eth, bsc, matic, arbitrum, base, optimism, robinhood, arc, tron, solana, btc, zec, ltc, doge, dash, bch, xrp, xlm, ada (lower case). Polygon is matic, BNB Chain is bsc, Ethereum is eth. Any other value is refused. | |
| items | Yes | asset@time pairs separated by "|" (up to 500; pairs after the 500th are ignored - compare Items_Requested with Items_Used). asset = token contract (0x-hex on EVM chains, base58 on tron, mint on solana) or native for the chain's own coin; time = UTC, YYYY-MM-DD HH:MM:SS (or YYYY-MM-DD, or with a T and a trailing Z) or 10-digit unix seconds. A pair may be repeated: every position gets its own row. Example: native@2025-01-15 12:00:00|0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48@1736942400. Letters, digits, "@", "|", "-", ":" and spaces only. | |
| format | No | Shape of the returned data. "rows" (the default) returns one item per row. "columnar" returns a single item, {"columns":[...],"rows":[[value,...],...]}, naming the columns once and listing each row's values in that order; it is more compact for large results and carries the same values. | rows |
| with_age | No | 1 = also return Price_Time and Age_Seconds (which price point answered, and how old it was at the asked time) on the EVM chains and tron - a noticeably heavier call, use it to audit a stale or suspect row, not by default. Ignored on solana; the btc / zec / ltc / doge / dash / bch / xrp / xlm / ada answers always carry both. 0 (default) = prices and statuses only. Only 0 or 1. |