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

# Human's manual

> How the catalog is organized, how its tables are named, and how to read a page.

The catalog is a set of BigQuery tables. These docs describe every one of them, and every page follows the same shape. This page explains the organization, the table names, the parts of a page and the marks on it.

## Organization

The catalog is one set of tables, presented four ways.

<table>
  <thead>
    <tr>
      <th width="170">Band</th>
      <th>What it is</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>[Popular datasets](https://tokenterminal.com/docs/catalog/index.md#popular-datasets)</td>
      <td>A dataset that belongs to no single market and no single chain: Financial statements, User retention, Prices, Agentic payments, Yields, Token transfers, Geographic intelligence and P\&L. Each one answers a question on its own terms, so its shape follows the question rather than the house pattern. The entity keys still join: every row carries a `project_id`, `chain_id`, `asset_id`, `token_id` or account address.</td>
    </tr>

    <tr>
      <td>[Market verticals](https://tokenterminal.com/docs/catalog/index.md#market-verticals)</td>
      <td>A cross-chain slice into one market: Stablecoins, Real-world assets, DEX, Perpetuals, Lending, Bridges and the rest. A market is the entity tables with one filter applied, so its pages point back at the tables the entities own.</td>
    </tr>

    <tr>
      <td>[Chain ecosystems](https://tokenterminal.com/docs/catalog/index.md#chain-ecosystems)</td>
      <td>One chain's slice across every market: its raw blocks and transactions, then every entity and market layer with data on that chain. Each chain page lists the layers the chain carries and the date each one starts.</td>
    </tr>

    <tr>
      <td>[Core entities](https://tokenterminal.com/docs/catalog/index.md#core-entities)</td>
      <td>The model of the system and the actors in it. A project runs apps on chains and issues assets; an asset is deployed as tokens; tokens move between accounts. Every table in the catalog is keyed to one or more of those actors. Each entity section holds their registry, the events they take part in, and their daily numbers.</td>
    </tr>
  </tbody>
</table>

## Dataset types

The dataset a table lives in says what kind of table it is. Each kind has its own icon in the sidebar.

**Dimensions**

&#x20;**Dimensions** are the registry. A dimension is the metadata of every thing of one kind, one row per thing: its name, its identifiers and its classifications. `dimensions.assets` is every asset, `dimensions.chains` every chain, `dimensions.dex_pools` every trading pool. Nothing on a dimension row changes from day to day. Every other table joins a dimension on its id. The Registry page of each section documents them.

> **[Assets ▸ Registry](https://tokenterminal.com/docs/catalog/assets/registry.md)**
>
> Asset names, where each is issued, and what each one tracks.

> **[Projects ▸ Registry](https://tokenterminal.com/docs/catalog/projects/registry.md)**
>
> Project names, market sectors, and who runs what.

> **[DEX ▸ Registry](https://tokenterminal.com/docs/catalog/dex/registry.md)**
>
> Pool identity, the fee it charges, its tokens, and who runs it.

**Facts**

&#x20;**Facts** are events. A fact is one row per thing that happened onchain, at the time it happened: the block, the transaction, the accounts involved, the amount and the ids of the dimensions it belongs to. `facts_tokens.transfers` is every token transfer, `facts_bridge_tokens.transfers` every cross-chain transfer, `facts_lending_markets.deposits` every deposit into a lending market. Amounts are in the token's own units; a USD value is a join to prices. Facts are the record every metric is built from. Each fact table has its own page, named by its event: Transfers, Trades, Deposits.

> **[Tokens ▸ Transfers](https://tokenterminal.com/docs/catalog/tokens/transfers.md)**
>
> Every fungible token transfer.

> **[Bridges ▸ Transfers](https://tokenterminal.com/docs/catalog/bridges/transfers.md)**
>
> Cross-chain bridge transfers, with the sending and arriving sides matched.

> **[Perpetuals ▸ Trades](https://tokenterminal.com/docs/catalog/perpetuals/trades.md)**
>
> Individual perpetual trades.

> **[Perpetuals ▸ Trades](https://tokenterminal.com/docs/catalog/perpetuals/trades.md)**
>
> Individual perpetual and order-book market trades.

**Metrics**

&#x20;**Metrics** are aggregates over a period. Each measure has its own table, holding one row per thing per period with that thing's identifier columns and one value column: daily for most tables, hourly for prices. Some tables also have a `provenance` column naming which source supplied that row (see Marks). Every measure of one kind of thing sits in one dataset, so `metrics_assets.market_cap_circulating_daily` is every asset's supply on every day and `metrics_tokens.price_hourly` is every token's price every hour. Reading two measures at once is a join on the thing's id and the period. Metrics are built from the facts and keyed to the same dimensions, so a metric row joins its registry row on the same id. The Metrics page of each section documents them, and [Metric definitions](https://tokenterminal.com/docs/catalog/metric-definitions.md) holds the unit and the combination rule of every measure.

> **[Assets ▸ Metrics](https://tokenterminal.com/docs/catalog/assets/metrics.md)**
>
> Daily asset tables: supply, holders, transfers, price, yield and the gap from peg.

> **[Projects ▸ Metrics](https://tokenterminal.com/docs/catalog/projects/metrics.md)**
>
> TVL, Fees, Revenue, Token incentives, Active users and sector-specific volume per project and per project on one chain.

> **[Tokens ▸ Prices](https://tokenterminal.com/docs/catalog/tokens/metrics.md)**
>
> One USD price per token per day, and per hour.

**Reports**

&#x20;**Reports** are a set of measures pre-joined into one row, for a question you would otherwise answer by joining several metrics tables. A report row is one thing for one period, carrying every measure the question needs side by side, so `reports_projects.financial_statements_quarterly` is one project's income statement and treasury for a quarter, in one row, rather than a metrics table per line joined on project and period. Reports hold nothing the metrics tables do not: every column traces back to a measure, so a figure read here and the same figure read from its metrics table agree. Reach for a report when the question is already the one it answers, and for metrics when it is not.

A period in the table name means the table carries history, one row per period. No period in the name means one row per thing, as of now.

> **[Popular datasets ▸ Financial statements](https://tokenterminal.com/docs/catalog/popular-datasets/financial-statements.md)**
>
> A protocol's income statement and treasury, by reporting period.

> **[Popular datasets ▸ User retention](https://tokenterminal.com/docs/catalog/popular-datasets/user-retention.md)**
>
> A protocol's monthly user cohorts, and the share of each still active in the months after signup.

**Screeners**

&#x20;**Screeners** are one row per thing as of the last complete day, for ranking and filtering things against each other. A screener is generated from the thing's key and its measures: every column is `<measure>_<window>_<aggregation>`, one measure over one window from a day to a year or all history, under one aggregation, so `screeners.projects` holds `fees_30d_sum`, `fees_30d_trend` and `tvl_7d_change` side by side for every project. A report is curated instead: its columns were chosen to answer one question. Like a report, a screener holds nothing the metrics tables do not.

> **[Projects ▸ Screener](https://tokenterminal.com/docs/catalog/projects/screener.md)**
>
> Every project's latest figures, with averages, totals and changes over six windows, in one row.

> **[Chains ▸ Screener](https://tokenterminal.com/docs/catalog/chains/screener.md)**
>
> Every chain's latest figures and its apps' figures, with averages, totals and changes over six windows, in one row.

> **[Assets ▸ Screener](https://tokenterminal.com/docs/catalog/assets/screener.md)**
>
> Every asset's latest figures across all chains, per chain and per token, with averages, totals and changes over six windows, in one row.

**Functions**

&#x20;**Functions** are calculations on request. A function runs when you call it, for figures too numerous to store. `functions.calculate_latest_token_balances` returns every holder of a token and their balance, worked out from the token's transfers at query time. Function pages document them.

> **[Tokens ▸ Balances](https://tokenterminal.com/docs/catalog/tokens/balances.md)**
>
> Holder balances on any past date, computed at query time.

> **[Stablecoins ▸ Balances](https://tokenterminal.com/docs/catalog/stablecoins/balances.md)**
>
> Stablecoin holder balances at any past date, computed at query time.

**Raw chain**

&#x20;**Raw chain datasets** stand apart from the others. Each chain has its own dataset named after it, holding the chain's own record in a standardized shape: `ethereum.transactions` is every Ethereum transaction, `solana.blocks` every Solana block. Chains of the same kind share one shape, so a query written for one EVM chain runs on another with the dataset name swapped. [Chain ecosystems](https://tokenterminal.com/docs/catalog/index.md#chain-ecosystems) document them.

> **[Ethereum ▸ Raw](https://tokenterminal.com/docs/catalog/chain-verticals/evm/ethereum/raw.md)**
>
> The standardized Ethereum blocks, transactions, logs and internal calls.

> **[Base ▸ Raw](https://tokenterminal.com/docs/catalog/chain-verticals/evm/base/raw.md)**
>
> The standardized Base blocks, transactions, logs and internal calls.

> **[Solana](https://tokenterminal.com/docs/catalog/chain-verticals/solana/index.md)**
>
> Standardized Solana blocks, transactions, instructions, account activity and rewards.

## Table names

A table name is `dataset.table`. The dataset says what kind of table it is, and for facts and metrics it also says which things the table is about. Things are plural in a table name and singular in the identifier column that joins them: `facts_lending_markets.deposits` carries `lending_market_id`, which joins `dimensions.lending_markets`.

**Dimensions**

`dimensions.<things>`: the things, plural. One row per thing.

<table>
  <thead>
    <tr>
      <th width="280">Table</th>
      <th>Reads as</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`dimensions.assets`</td>
      <td>The registry of assets.</td>
    </tr>

    <tr>
      <td>`dimensions.assets_by_chain`</td>
      <td>The registry of asset chains: one asset's deployments on one chain, taken together.</td>
    </tr>

    <tr>
      <td>`dimensions.asset_tokens`</td>
      <td>The registry of asset tokens: one asset on one chain.</td>
    </tr>

    <tr>
      <td>`dimensions.dex_pools`</td>
      <td>The registry of DEX pools.</td>
    </tr>

    <tr>
      <td>`dimensions.lending_markets`</td>
      <td>The registry of lending markets.</td>
    </tr>

    <tr>
      <td>`dimensions.metrics`</td>
      <td>The registry of measures: the unit and combination rule of every one.</td>
    </tr>
  </tbody>
</table>

**Facts**

`facts_<things>.<events>`: the dataset names the thing the event happens to, plural; the table names the event, plural. One row per event. The thing's identifier column joins its dimension.

<table>
  <thead>
    <tr>
      <th width="250">Table</th>
      <th width="120">Thing</th>
      <th width="120">Event</th>
      <th>Reads as</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`facts_tokens.transfers`</td>
      <td>Token</td>
      <td>Transfer</td>
      <td>Transfers of tokens, one row per transfer.</td>
    </tr>

    <tr>
      <td>`facts_bridge_tokens.transfers`</td>
      <td>Bridge</td>
      <td>Transfer</td>
      <td>Transfers across bridges, one row per cross-chain transfer with both legs paired.</td>
    </tr>

    <tr>
      <td>`facts_lending_markets.deposits`</td>
      <td>Lending market</td>
      <td>Deposit</td>
      <td>Deposits into lending markets, one row per deposit.</td>
    </tr>

    <tr>
      <td>`facts_perp_markets.trades`</td>
      <td>Perp market</td>
      <td>Trade</td>
      <td>Trades on perpetual markets, one row per leg of a fill.</td>
    </tr>
  </tbody>
</table>

**Metrics**

`metrics_<things>.<measure>_<period>`: the dataset names the **level**, the things measured, plural; two things joined means one row per pair, and every level rolls up to the one above it. The table names the **measure** and the **period**, the row's time step. One measure per table, so a row carries the level's identifier columns, the period column and one value column of the same name as the measure, plus `provenance` on the tables that have one (see Marks).

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th>Level</th>
      <th width="170">Measure</th>
      <th width="90">Period</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`metrics_assets.market_cap_circulating_daily`</td>
      <td>One asset</td>
      <td>Circulating market cap</td>
      <td>Day</td>
    </tr>

    <tr>
      <td>`metrics_asset_tokens.holders_native_daily`</td>
      <td>One asset on one chain</td>
      <td>Holders</td>
      <td>Day</td>
    </tr>

    <tr>
      <td>`metrics_projects.fees_daily`</td>
      <td>One project</td>
      <td>Fees</td>
      <td>Day</td>
    </tr>

    <tr>
      <td>`metrics_projects_by_chain.fees_daily`</td>
      <td>One project on one chain</td>
      <td>Fees</td>
      <td>Day</td>
    </tr>

    <tr>
      <td>`metrics_dex_pools_by_pair.trading_volume_daily`</td>
      <td>One pool, one traded pair</td>
      <td>Trading volume</td>
      <td>Day</td>
    </tr>

    <tr>
      <td>`metrics_tokens.price_daily`</td>
      <td>One token</td>
      <td>Price</td>
      <td>Day</td>
    </tr>

    <tr>
      <td>`metrics_tokens.price_hourly`</td>
      <td>One token</td>
      <td>Price</td>
      <td>Hour</td>
    </tr>
  </tbody>
</table>

**Reports**

`reports_<things>.<report>_<period>`: the dataset names the **things** the report is about, plural, and the table names the **report** and the **period** each row covers. Unlike a metrics table it carries many measures rather than one, because the point of a report is that the joining is already done.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th>Reads as</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`reports_projects.financial_statements_quarterly`</td>
      <td>One project's financial statement for one quarter, per row.</td>
    </tr>

    <tr>
      <td>`reports_projects.financial_statements_yearly`</td>
      <td>The same statement over calendar years.</td>
    </tr>

    <tr>
      <td>`reports_projects.user_retention_monthly`</td>
      <td>One project's users first active in one month, and the share of them active in each month after, per row.</td>
    </tr>
  </tbody>
</table>

**Screeners**

`screeners.<things>`: the dataset is the kind and the table names the **things**, plural. One row per thing as of the last complete day, `as_of`, so no period in the name. Each column is `<measure>_<window>_<aggregation>`, the window `max` meaning all history (`tvl_max_ath`).

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th>Reads as</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`screeners.projects`</td>
      <td>One project's figures as of the last complete day, per row.</td>
    </tr>

    <tr>
      <td>`screeners.chains`</td>
      <td>The same for one chain.</td>
    </tr>

    <tr>
      <td>`screeners.assets`</td>
      <td>The same for one asset, across every chain.</td>
    </tr>

    <tr>
      <td>`screeners.assets_by_chain`</td>
      <td>The same for one asset on one chain, its deployments there taken together.</td>
    </tr>

    <tr>
      <td>`screeners.asset_tokens`</td>
      <td>The same for one asset's token contract on one chain.</td>
    </tr>
  </tbody>
</table>

**Functions**

`functions.calculate_<result>`: `calculate_`, then what comes back. Called with arguments, in place of a table name.

<table>
  <thead>
    <tr>
      <th width="340">Function</th>
      <th>Reads as</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`functions.calculate_latest_token_balances`</td>
      <td>Calculates the latest balance of every holder of one token.</td>
    </tr>

    <tr>
      <td>`functions.calculate_historical_eod_token_balances`</td>
      <td>Calculates every holder's balance of one token at the end of a past day.</td>
    </tr>
  </tbody>
</table>

**Raw chain**

`<chain>.<table>`: the chain's `chain_id` as the dataset, then the record type, plural. One row per block, transaction, log or call.

<table>
  <thead>
    <tr>
      <th width="280">Table</th>
      <th>Reads as</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`ethereum.blocks`</td>
      <td>Ethereum's blocks, one row per block.</td>
    </tr>

    <tr>
      <td>`ethereum.transactions`</td>
      <td>Ethereum's transactions, one row per transaction.</td>
    </tr>

    <tr>
      <td>`base.logs`</td>
      <td>Base's event logs, one row per log.</td>
    </tr>

    <tr>
      <td>`solana.account_activity`</td>
      <td>Solana's account activity, one row per account touched per transaction.</td>
    </tr>
  </tbody>
</table>

## Page kinds

Every page is one of the kinds below. Each kind has a fixed flow of parts, top to bottom.

**Overview**

The first page of a section.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>What the entity or the market is, in a few sentences.</td>
    </tr>

    <tr>
      <td>Pages</td>
      <td>One card per page in the section.</td>
    </tr>

    <tr>
      <td>Coverage</td>
      <td>Every app the section covers, the chains each one runs on, and the project behind it. The query beside it returns the same table, live.</td>
    </tr>
  </tbody>
</table>

> **[Stablecoins ▸ Overview](https://tokenterminal.com/docs/catalog/stablecoins/index.md)**
>
> Every stablecoin: supply, holders, transfers and off-peg, across every chain.

> **[Projects ▸ Overview](https://tokenterminal.com/docs/catalog/projects/index.md)**
>
> Protocols, the apps they run, and financial metrics at every level.

> **[EVM ecosystem ▸ Overview](https://tokenterminal.com/docs/catalog/chain-verticals/evm/index.md)**
>
> Standardized blocks, transactions, logs and traces for every EVM chain.

**Registry**

The dimension tables of a section.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>What the tables describe; with several tables, one bullet per table with its grain.</td>
    </tr>

    <tr>
      <td>Columns</td>
      <td>Every column, its type and one line on what it holds. With several tables this is Tables: one tab per table, each with its own column table.</td>
    </tr>

    <tr>
      <td>Sample queries</td>
      <td>One tab per question, each opening with a bold sentence saying what the query answers.</td>
    </tr>
  </tbody>
</table>

> **[Assets ▸ Registry](https://tokenterminal.com/docs/catalog/assets/registry.md)**
>
> Asset names, where each is issued, and what each one tracks.

> **[Projects ▸ Registry](https://tokenterminal.com/docs/catalog/projects/registry.md)**
>
> Project names, market sectors, and who runs what.

> **[Lending ▸ Registry](https://tokenterminal.com/docs/catalog/lending/registry.md)**
>
> Every lending market: one asset inside one lending pool.

**Facts**

One fact table, named by its event: Transfers, Trades, Deposits.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>What the table records and what one row stands for: "one row per transfer".</td>
    </tr>

    <tr>
      <td>Columns</td>
      <td>Every column, its type and one line on what it holds.</td>
    </tr>

    <tr>
      <td>Coverage</td>
      <td>Every app these tables carry a figure for. Present when it is narrower than the section's own coverage.</td>
    </tr>

    <tr>
      <td>Sample queries</td>
      <td>A yellow box naming the timestamp column to bound, then one tab per question.</td>
    </tr>

    <tr>
      <td>Notes</td>
      <td>Caveats: what the table does not hold, or a rule that is easy to get wrong.</td>
    </tr>
  </tbody>
</table>

> **[Tokens ▸ Transfers](https://tokenterminal.com/docs/catalog/tokens/transfers.md)**
>
> Every fungible token transfer.

> **[Bridges ▸ Transfers](https://tokenterminal.com/docs/catalog/bridges/transfers.md)**
>
> Cross-chain bridge transfers, with the sending and arriving sides matched.

> **[Perpetuals ▸ Trades](https://tokenterminal.com/docs/catalog/perpetuals/trades.md)**
>
> Individual perpetual trades.

> **[Perpetuals ▸ Trades](https://tokenterminal.com/docs/catalog/perpetuals/trades.md)**
>
> Individual perpetual and order-book market trades.

**Metrics**

The metrics tables of a section.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>What is measured, and the dataset behind each level with the grain of its rows.</td>
    </tr>

    <tr>
      <td>Tables</td>
      <td>One tab per level. Each tab lists that level's tables with the value column each one carries.</td>
    </tr>

    <tr>
      <td>Coverage</td>
      <td>Every app these tables carry a figure for. Present when it is narrower than the section's own coverage.</td>
    </tr>

    <tr>
      <td>Sample queries</td>
      <td>One tab per question, each bounded on `timestamp`.</td>
    </tr>

    <tr>
      <td>Notes</td>
      <td>Caveats: which measures do not add up, and what an empty cell means.</td>
    </tr>
  </tbody>
</table>

> **[Assets ▸ Metrics](https://tokenterminal.com/docs/catalog/assets/metrics.md)**
>
> Daily asset tables: supply, holders, transfers, price, yield and the gap from peg.

> **[Projects ▸ Metrics](https://tokenterminal.com/docs/catalog/projects/metrics.md)**
>
> TVL, Fees, Revenue, Token incentives, Active users and sector-specific volume per project and per project on one chain.

> **[DEX ▸ Metrics](https://tokenterminal.com/docs/catalog/dex/metrics.md)**
>
> Daily volume, TVL, fees and flash-loan volume per pool and per pair.

**Functions**

The functions of a section.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>What the functions compute and from which table.</td>
    </tr>

    <tr>
      <td>Functions</td>
      <td>One tab per function: its parameters, what it returns, and what the result means.</td>
    </tr>

    <tr>
      <td>Sample queries</td>
      <td>One tab per question, each calling a function in place of a table.</td>
    </tr>

    <tr>
      <td>Notes</td>
      <td>Caveats: cost, and what a missing row means.</td>
    </tr>
  </tbody>
</table>

> **[Tokens ▸ Balances](https://tokenterminal.com/docs/catalog/tokens/balances.md)**
>
> Holder balances on any past date, computed at query time.

> **[Stablecoins ▸ Balances](https://tokenterminal.com/docs/catalog/stablecoins/balances.md)**
>
> Stablecoin holder balances at any past date, computed at query time.

**Worked view**

A market's page over a table another section owns.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>The filter that selects the market, and the pointer to the owning page: "Every column is documented at ...".</td>
    </tr>

    <tr>
      <td>Sample queries</td>
      <td>One tab per question, with the filter applied.</td>
    </tr>

    <tr>
      <td>Notes</td>
      <td>Caveats specific to the market.</td>
    </tr>
  </tbody>
</table>

> **[Stablecoins ▸ Transfers](https://tokenterminal.com/docs/catalog/stablecoins/transfers.md)**
>
> Every stablecoin transfer.

> **[Stablecoins ▸ Metrics](https://tokenterminal.com/docs/catalog/stablecoins/metrics.md)**
>
> Daily supply, holders, transfers and off-peg, per stablecoin and per deployment.

> **[Real-world assets ▸ Metrics](https://tokenterminal.com/docs/catalog/real-world-assets/metrics.md)**
>
> Daily real-world asset supply, holders, transfer activity, price and yield.

**Chain overview**

The first page of a chain section.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>What the catalog holds for the chain and the dataset the chain's own record sits in.</td>
    </tr>

    <tr>
      <td>Layers</td>
      <td>One row per layer with data on the chain, with the date the layer starts.</td>
    </tr>

    <tr>
      <td>Filtering</td>
      <td>The `chain_id` filter that selects the chain in every catalog table, with one query.</td>
    </tr>
  </tbody>
</table>

> **[Ethereum ▸ Overview](https://tokenterminal.com/docs/catalog/chain-verticals/evm/ethereum/index.md)**
>
> Everything the catalog holds for Ethereum, from raw blocks to project activity.

> **[Base ▸ Overview](https://tokenterminal.com/docs/catalog/chain-verticals/evm/base/index.md)**
>
> Everything the catalog holds for Base, from raw blocks to project activity.

> **[Solana](https://tokenterminal.com/docs/catalog/chain-verticals/solana/index.md)**
>
> Standardized Solana blocks, transactions, instructions, account activity and rewards.

**Chain layer**

One layer on one chain: a worked view of that layer with the chain filter applied.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>What the layer holds on this chain, and the pointer to the page that owns the columns.</td>
    </tr>

    <tr>
      <td>Tables</td>
      <td>On the Raw page only: the chain's own tables, one line each.</td>
    </tr>

    <tr>
      <td>Sample queries</td>
      <td>One tab per question, with `chain_id` fixed.</td>
    </tr>

    <tr>
      <td>Notes</td>
      <td>Caveats specific to the chain.</td>
    </tr>
  </tbody>
</table>

> **[Ethereum ▸ Raw](https://tokenterminal.com/docs/catalog/chain-verticals/evm/ethereum/raw.md)**
>
> The standardized Ethereum blocks, transactions, logs and internal calls.

> **[Ethereum ▸ DEX](https://tokenterminal.com/docs/catalog/chain-verticals/evm/ethereum/dex.md)**
>
> Ethereum trading pools, their daily volume, value locked and fees.

> **[Base ▸ Stablecoins](https://tokenterminal.com/docs/catalog/chain-verticals/evm/base/stablecoins.md)**
>
> Every stablecoin issued on Base: supply, holders and transfers.

**Archived roster**

One page per family for the chains that have stopped, in place of a section each.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Intro</td>
      <td>The tables the family carries, and that the record has ended, so both dates are final.</td>
    </tr>

    <tr>
      <td>Chain tabs</td>
      <td>One tab per chain, holding a row per raw table with the earliest and latest month it covers.</td>
    </tr>
  </tbody>
</table>

> **[Archived chains ▸ EVM ecosystem](https://tokenterminal.com/docs/catalog/chain-verticals/archived/evm.md)**
>
> The archived EVM chains, and the months each raw table covers.

> **[Archived chains ▸ Substrate ecosystem](https://tokenterminal.com/docs/catalog/chain-verticals/archived/substrate.md)**
>
> The archived Substrate chains, and the months each raw table covers.

**Changelog**

One page, one entry per week, for what changed in the catalog. The only dated page: its numbers are the week's.

<table>
  <thead>
    <tr>
      <th width="160">Part</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Entry</td>
      <td>One block per week, newest first, labelled with the Tuesday it was published.</td>
    </tr>

    <tr>
      <td>Breaking</td>
      <td>A table or column renamed, dropped, retyped or re-keyed, a table retired or moved, a chain archived, with what a query does now on the same line. Present in every entry, even when it reads None.</td>
    </tr>

    <tr>
      <td>New, Expanded, Fixed</td>
      <td>Tables that serve for the first time; more venues, chains, assets or history on a table that already served; corrections that changed numbers already queryable. Each line opens on the entity, linked to the page that documents it, then a verb from a fixed set: Add, Extend, Restore, Backfill, Fix.</td>
    </tr>
  </tbody>
</table>

> **[Changelog](https://tokenterminal.com/docs/catalog/changelog.md)**
>
> What changed in the catalog, week by week: new tables, wider coverage, corrections, and every breaking change with its migration.

## Marks

<table>
  <thead>
    <tr>
      <th width="200">Mark</th>
      <th>Meaning</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>**In progress**</td>
      <td>A `Soon` tag beside a page title, a banner at the top of a page, or bold text on a card. The table is documented ahead of serving: the page is its spec, and the table lands behind it.</td>
    </tr>

    <tr>
      <td>**New**</td>
      <td>A `New` tag beside a page title. The tables on the page serve, and the page landed in the last 30 days.</td>
    </tr>

    <tr>
      <td>Since</td>
      <td>A date in a chain page's Layers table: the earliest day that layer holds for the chain.</td>
    </tr>

    <tr>
      <td>Source</td>
      <td>A word in a Metrics page's table list. Ladder is summed from the entity's own markets and pools. Projected is the project's series attributed to the entity that reports it.</td>
    </tr>

    <tr>
      <td>Provenance</td>
      <td>A column on the metrics tables that are built two ways. Its value is `ladder`, a figure summed from the thing's own markets and pools, or `projected`, the level above attributed down to it.</td>
    </tr>

    <tr>
      <td>Warning box</td>
      <td>The table is large and split by day. The box names the column to bound. A query with no bound reads the whole table, and the whole table is billed to you.</td>
    </tr>

    <tr>
      <td>Your BQ Project ID</td>
      <td>The field at the right end of the top bar. Write your project id there and the browser keeps it. Every sample query on every page rewrites itself to run in your project.</td>
    </tr>
  </tbody>
</table>

## Identifiers

Simple identifiers are lowercase names. Combined identifiers join their parts with dashes.

<table>
  <thead>
    <tr>
      <th width="170">Identifier</th>
      <th width="320">Shape</th>
      <th>Example</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`chain_id`</td>
      <td>Chain name</td>
      <td>`ethereum`</td>
    </tr>

    <tr>
      <td>`asset_id`</td>
      <td>Asset name</td>
      <td>`usdc`</td>
    </tr>

    <tr>
      <td>`project_id`</td>
      <td>Project name</td>
      <td>`uniswap`</td>
    </tr>

    <tr>
      <td>`app_id`</td>
      <td>Project name and version</td>
      <td>`uniswap-v3`</td>
    </tr>

    <tr>
      <td>`token_id`</td>
      <td>`{token_address}-{chain_id}`</td>
      <td>`0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum`</td>
    </tr>

    <tr>
      <td>`asset_token_id`</td>
      <td>`{asset_id}-{token_address}-{chain_id}`</td>
      <td>`usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum`</td>
    </tr>
  </tbody>
</table>

An asset is one identity across chains and a token is one contract on one chain: USDC is one row in `dimensions.assets`, one row per chain in `dimensions.assets_by_chain` and one row per token contract in `dimensions.asset_tokens`. EVM addresses are stored lowercase: wrap an address copied from a block explorer in `lower()` before matching it. Solana addresses are base58 and case-sensitive: stored and matched verbatim. [Accounts](https://tokenterminal.com/docs/catalog/accounts/index.md) covers the address rules.

## Numbers

* **An empty cell is not zero.** It means no figure exists for that measure, for that thing, on that day.
* **Units live in the metric definition.** `dimensions.metrics` names the unit of every measure: `usd`, `count`, `ratio` or `pct`. Ratios are fractions: an `apy` of `0.05` is five percent, and an `off_peg` of `-0.02` is two percent below peg.
* **Every measure is additive, semi-additive or non-additive.**

  * **Additive**: flows, such as Fees or Trading volume. They add up across days and across things: a week is seven days added together, a project is its apps added together.
  * **Semi-additive**: balances, such as TVL or Supply. They add up across things but not across days: a week's figure is the last day's.
  * **Non-additive**: rates and counts of distinct addresses, such as APY or Active users. They add up neither way.

  [Metric definitions](https://tokenterminal.com/docs/catalog/metric-definitions.md) holds the class and the rule for every measure.
* **A report or screener row holds many measures.** [Financial statements](https://tokenterminal.com/docs/catalog/popular-datasets/financial-statements.md) puts one period's figures side by side, flows summed over the period and balances read at its close. The [project screener](https://tokenterminal.com/docs/catalog/projects/screener.md) puts every window of every measure on one row, each column named `<measure>_<window>_<aggregation>`.

## Running a query

**1. Get the share**

The catalog arrives in your own Google Cloud project as a BigQuery share, and compute is billed to you. [Contact us](https://calendly.com/d/cv8h-mgf-n3g/token-terminal-api-demo) to arrange it.

**2. Write your project id**

Type your BigQuery project id into the field at the right end of the top bar. Every sample query on every page carries it.

**3. Copy a sample query**

Open the page for the table, pick the tab whose bold sentence matches your question, and copy the query.

**4. Run it in BigQuery**

Paste the query into the BigQuery console and run it. Keep the date bound the query came with, and widen it once the result looks right.


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