> ## Documentation Index
> Fetch the complete documentation index at: https://tokenterminal.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To query the Token Terminal data catalog, read https://tokenterminal.com/docs/catalog/agents-manual.md first. It is the whole catalog as one page: table naming grammar, key columns, partition and cluster rules, units, additivity, and the tables that are documented but not served yet.
> Never query a catalog table on a time bound alone. Also filter its cluster key, which you read from INFORMATION_SCHEMA.COLUMNS; an empty result means the object is a view, whose pruning contract is on its page. Compute is billed to the caller's own Google Cloud project.

# Prices

> One USD price per token and per curated asset, per day.

A price is one USD figure at one moment, held per token contract on one chain and per curated asset. `price` is that figure, and a row appears for each day a price was taken for that day.

## Coverage

Every chain we cover prices on.

`algorand`
`aptos`
`arbitrum`
`avalanche`
`base`
`berachain`
`blast`
`bob`
`bobanetwork`
`bsc`
`cardano`
`celo`
`chainflip`
`ethereum`
`flowevm`
`fraxtal`
`gnosis`
`gravityalpha`
`hedera`
`hydradx`
`hydradxevm`
`hyperevm`
`immutablezkevm`
`ink`
`iotex`
`katananetwork`
`linea`
`manta`
`megaeth`
`monad`
`movement`
`near`
`opbnb`
`optimism`
`plasma`
`polkadotassethub`
`polygon`
`ripple`
`robinhoodchain`
`rootstock`
`scroll`
`seievm`
`solana`
`sonic`
`stacks`
`starknet`
`stellar`
`sui`
`tempo`
`tron`
`unichain`
`viction`
`worldchain`
`xdc`
`xlayer`
`zksyncera`

## Tables

**Token, daily**

One row per token per day, in `metrics_tokens.price_daily`.

<table>
  <thead>
    <tr>
      <th width="230">Column</th>
      <th width="120">Type</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`timestamp`</td><td>TIMESTAMP</td><td>The moment the price was taken: midnight UTC in the daily table, the top of the hour in the hourly one.</td></tr>
    <tr><td>`token_id`</td><td>STRING</td><td>Token the price belongs to: `{token_address}-{chain_id}`.</td></tr>
    <tr><td>`chain_id`</td><td>STRING</td><td>Chain the token is deployed on.</td></tr>
    <tr><td>`price`</td><td>FLOAT64</td><td>The price in US dollars at that moment.</td></tr>
  </tbody>
</table>

**Token, hourly**

One row per token per hour, in `metrics_tokens.price_hourly`. It keys the same way as the daily table, so moving a query between them means swapping the table name and the time bounds.

<table>
  <thead>
    <tr>
      <th width="230">Column</th>
      <th width="120">Type</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`timestamp`</td><td>TIMESTAMP</td><td>The moment the price was taken: midnight UTC in the daily table, the top of the hour in the hourly one.</td></tr>
    <tr><td>`token_id`</td><td>STRING</td><td>Token the price belongs to: `{token_address}-{chain_id}`.</td></tr>
    <tr><td>`chain_id`</td><td>STRING</td><td>Chain the token is deployed on.</td></tr>
    <tr><td>`price`</td><td>FLOAT64</td><td>The price in US dollars at that moment.</td></tr>
  </tbody>
</table>

**Asset, daily**

One row per asset per day, in `metrics_assets.price_daily`. An asset price belongs to the asset itself, so it holds across every chain the asset is deployed on.

<table>
  <thead>
    <tr>
      <th width="230">Column</th>
      <th width="120">Type</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`timestamp`</td><td>TIMESTAMP</td><td>Midnight UTC of the day the price was taken.</td></tr>
    <tr><td>`asset_id`</td><td>STRING</td><td>Identifier of the asset, for example `usdc`.</td></tr>
    <tr><td>`price_source`</td><td>STRING</td><td>Which source the figure came from. It labels the price and measures nothing.</td></tr>
    <tr><td>`price`</td><td>FLOAT64</td><td>The asset's price in USD. Where more than one source has a price, we take them in a fixed order of preference.</td></tr>
  </tbody>
</table>

## Sample queries

> [!WARNING]
>
> `metrics_tokens.price_hourly` is large and split by month. Bound `timestamp` and filter `chain_id` on every query against it, or you read the whole table and the whole table is billed to you.

**One asset, every chain**

`dimensions.asset_tokens` maps one asset onto its deployments, and `token_id` is the key it shares with the price table, which holds one price per deployment.

```sql theme={null}
select
    prices.timestamp,
    deployments.chain_id,
    prices.price
from `metrics_tokens.price_daily` as prices
join `dimensions.asset_tokens` as deployments
    using (token_id)
where deployments.asset_id = 'usdc'
  and prices.timestamp >= timestamp('2026-07-01')
order by prices.timestamp, deployments.chain_id
```

**Asset against deployment**

The two figures are measured separately, so they can differ on the same day. Both tables have `timestamp` at midnight UTC, and the join matches on it.

```sql theme={null}
select
    assets.timestamp,
    assets.price as asset_price,
    tokens.price as token_price
from `metrics_assets.price_daily` as assets
join `metrics_tokens.price_daily` as tokens
    on tokens.timestamp = assets.timestamp
    and tokens.token_id = '0xdac17f958d2ee523a2206206994597c13d831ec7-ethereum'
    and tokens.timestamp >= timestamp('2026-07-01')
where assets.asset_id = 'usdt'
  and assets.timestamp >= timestamp('2026-07-01')
order by assets.timestamp
```

**Pricing an event**

The hourly table is keyed on the top of the hour, so `timestamp_trunc` matches an event to it. Bound `block_timestamp` and filter `chain_id` on the transfer side too: that table is billed on what the query reads.

```sql theme={null}
select
    transfers.block_timestamp,
    transfers.transaction_hash,
    cast(transfers.amount_raw as bignumeric) / pow(10, tokens.decimals) * prices.price as amount_usd
from `facts_tokens.transfers` as transfers
join `dimensions.tokens` as tokens
    using (token_id)
join `metrics_tokens.price_hourly` as prices
    on prices.token_id = transfers.token_id
    and prices.timestamp = timestamp_trunc(transfers.block_timestamp, hour)
where transfers.token_address = '0xdac17f958d2ee523a2206206994597c13d831ec7'
  and transfers.chain_id = 'ethereum'
  and transfers.block_timestamp >= timestamp('2026-08-20')
  and transfers.block_timestamp < timestamp('2026-08-21')
order by amount_usd desc
limit 20
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.