> ## 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.

# Metrics

> One USD price per token per day, and per hour.

`metrics_tokens.price_daily` holds one row per token per day: the price in USD at midnight UTC. `metrics_tokens.price_hourly` holds the same figure at the top of every hour.

## Columns

Both tables share one schema.

<table>
  <thead>
    <tr>
      <th width="280">Column</th>
      <th width="130">Type</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>timestamp</code></td>
      <td><code>TIMESTAMP</code></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><code>token\_id</code></td>
      <td><code>STRING</code></td>
      <td>Token the price belongs to: <code>\{token\_address}-\{chain\_id}</code>. Joins <a href="/docs/catalog/tokens/registry"><code>dimensions.tokens</code></a>.</td>
    </tr>

    <tr>
      <td><code>chain\_id</code></td>
      <td><code>STRING</code></td>
      <td>Chain the token is deployed on.</td>
    </tr>

    <tr>
      <td><code>price</code></td>
      <td><code>FLOAT64</code></td>
      <td>The price in US dollars at that moment. Every row has a value, and a token has a row on each day it was priced, so a null after a left join is a missing row.</td>
    </tr>
  </tbody>
</table>

## Sample queries

<Tabs>
  <Tab title="Daily">
    The daily table suits long histories and joins to the other daily tables at a fraction of the hourly table's size. `token_id` is the key on both sides of the join.

    ```sql theme={null}
    select
        prices.timestamp,
        tokens.symbol,
        tokens.name,
        prices.price
    from `metrics_tokens.price_daily` as prices
    join `dimensions.tokens` as tokens
        using (token_id)
    where prices.token_id = '0xdac17f958d2ee523a2206206994597c13d831ec7-ethereum'
      and prices.timestamp >= timestamp('2026-07-01')
    order by prices.timestamp
    ```
  </Tab>

  <Tab title="Hourly">
    The hourly table suits analysis within a day, and pricing individual events. Both tables key the same way, so moving a query between them means swapping the table name and the time bounds.

    ```sql theme={null}
    select
        timestamp,
        price
    from `metrics_tokens.price_hourly`
    where token_id = '0xdac17f958d2ee523a2206206994597c13d831ec7-ethereum'
      and timestamp >= timestamp('2026-08-20')
      and timestamp < timestamp('2026-08-23')
    order by timestamp
    ```
  </Tab>
</Tabs>
