Skip to main content
Returns the metadata and current USD price of up to 100 tokens across chains in one request. Each item carries the token’s symbol, name, decimals, logo, and price. Use it to price a token list, show a token picker, or add symbols and USD prices to rows you already store, such as transfers from your own indexer. Unlike Balances and Transfers, this endpoint doesn’t take a wallet. It takes only the tokens parameter.

Parameters

string
required
Comma-separated chain:token_address pairs, up to 100, such as ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48,base:0x0000000000000000000000000000000000000000.
  • chain is a supported chain value. The same aliases work, such as mainnet for ethereum, and values are case-insensitive.
  • token_address is 0x followed by 40 hex characters, in any case. Use the zero address, 0x0000000000000000000000000000000000000000, for the chain’s native token, such as ETH on Base.
  • Pairs that name the same token, such as mainnet:0xA0b8… and ethereum:0xa0b8…, are returned once.
  • Any chain value outside supported chains returns 400 BAD_REQUEST.

Response

object[]
One entry per distinct token, in the order you requested them. A token Goldsky knows nothing about is still listed, with its metadata and price set to null, so you can match each entry to your request by chain and token_address.
The response has no pagination object. Every token you asked for comes back in one response.

How the data behaves

  • Prices are current. You can’t ask for a token’s price at a past time. To get the USD value of a past transfer, use Transfers, which prices each transfer at the time it happened.
  • Prices move between requests. Prices update on their own schedule, so two requests seconds apart can return different prices for the same token. Responses carry Cache-Control: public, max-age=2.
  • Metadata can fill in later. A token Goldsky hasn’t seen yet comes back with null fields, which can fill in on a later request.

Errors

This endpoint returns the same errors as the other feeds, except INVALID_CURSOR, CONFLICTING_FILTERS, and NATIVE_BALANCE_UNAVAILABLE, which don’t apply. A malformed tokens value returns 400 BAD_REQUEST, and error.message says what is wrong:

Billing

One request is billed as one request, however many tokens it looks up, so a request for 100 tokens costs the same as a request for one. See Feeds pricing.

Example

Look up USDC on Ethereum, ETH on Base, USDC on Base, and an address that isn’t a token:
The tokens come back in request order. Both USDC entries have a price_usd with no last_priced_at, because they’re priced at 1.0, and the last address comes back with null fields: