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

# Registry

> Pool identity, the fee it charges, its tokens, and who runs it.

The identity tables behind every DEX figure. Every fact and metric joins to one of them, and [Coverage](https://tokenterminal.com/docs/catalog/dex.md) introduces each grain.

## Tables

**Projects**

One row per project in the catalog.

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

  <tbody>
    <tr><td>`project_id`</td><td>STRING</td><td>The project, such as `aave`.</td></tr>
    <tr><td>`slug`</td><td>STRING</td><td>The project's key in Token Terminal page URLs. It differs from `project_id` where the page URL is hyphenated (`redstone-chain` for `redstonechain`).</td></tr>
    <tr><td>`url`</td><td>STRING</td><td>The project's page on the Token Terminal Explorer.</td></tr>
    <tr><td>`name`</td><td>STRING</td><td>Display name.</td></tr>
    <tr><td>`symbol`</td><td>STRING</td><td>Ticker of the project's token, where it has one.</td></tr>
    <tr><td>`logo`</td><td>STRING</td><td>Public URL of the project logo, a PNG. Its `?logo_hash=` suffix changes whenever the image does. Null for a project whose image was never uploaded.</td></tr>
    <tr><td>`description`</td><td>STRUCT</td><td>The project copy: `what` the project is, `who` it serves and `how` it works.</td></tr>
    <tr><td>`links`</td><td>ARRAY\<STRUCT></td><td>The project's links as `type` and `url` pairs (website, x, docs, github). `type` is the label as written, so `twitter` and `x` both occur.</td></tr>
    <tr><td>`market_sectors`</td><td>ARRAY\<STRING></td><td>Every market sector the project belongs to, as tag ids, primary first. Unnesting it yields one row per sector.</td></tr>
    <tr><td>`primary_market_sector`</td><td>STRING</td><td>The market sector the project is listed under: the first element of `market_sectors`. One value per row.</td></tr>
    <tr><td>`listing_date`</td><td>TIMESTAMP</td><td>When the project was listed on Token Terminal.</td></tr>
    <tr><td>`coingecko_id`</td><td>STRING</td><td>The project token's CoinGecko id.</td></tr>
    <tr><td>`coinmarketcap_id`</td><td>STRING</td><td>The project token's CoinMarketCap id.</td></tr>
  </tbody>
</table>

**Apps**

One row per app in the catalog.

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

  <tbody>
    <tr><td>`app_id`</td><td>STRING</td><td>The app, such as `aave-v3`.</td></tr>
    <tr><td>`project_id`</td><td>STRING</td><td>The project operating it.</td></tr>
    <tr><td>`name`</td><td>STRING</td><td>Display name.</td></tr>
    <tr><td>`market_sectors`</td><td>ARRAY\<STRING></td><td>Every sector the app is tagged with.</td></tr>
    <tr><td>`primary_market_sector`</td><td>STRING</td><td>The first of those, for grouping.</td></tr>
    <tr><td>`created_at`</td><td>TIMESTAMP</td><td>When the app was added.</td></tr>
  </tbody>
</table>

**Pools**

One row per pool on one chain, listing every pool ever created, including ones that never traded.

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

  <tbody>
    <tr>
      <td>`dex_pool_id`</td>
      <td>`STRING`</td>
      <td>Identifier of the pool: the pool address joined with the chain.</td>
    </tr>

    <tr>
      <td>`app_id`</td>
      <td>`STRING`</td>
      <td>The app operating the pool.</td>
    </tr>

    <tr>
      <td>`chain_id`</td>
      <td>`STRING`</td>
      <td>Chain the pool lives on.</td>
    </tr>

    <tr>
      <td>`project_id`</td>
      <td>`STRING`</td>
      <td>Project the operating app belongs to.</td>
    </tr>

    <tr>
      <td>`pool_address`</td>
      <td>`STRING`</td>
      <td>Onchain address of the pool. Where one contract holds every pool, this is the pool's id inside that contract.</td>
    </tr>

    <tr>
      <td>`pool_name`</td>
      <td>`STRING`</td>
      <td>The pool's tokens as a name, for example `USDC-WETH`.</td>
    </tr>

    <tr>
      <td>`pool_display_name`</td>
      <td>`STRING`</td>
      <td>Pool name with the fee added on, where the pool charges a fixed one.</td>
    </tr>

    <tr>
      <td>`fee_tier`</td>
      <td>`BIGNUMERIC`</td>
      <td>The fee the pool charges on every swap, as a decimal fraction, so `0.0005` reads 0.05%. Empty where the venue sets the fee swap by swap.</td>
    </tr>

    <tr>
      <td>`created_at`</td>
      <td>`TIMESTAMP`</td>
      <td>Time of the block the pool was created in.</td>
    </tr>

    <tr>
      <td>`hooks_address`</td>
      <td>`STRING`</td>
      <td>Address of the pool's hooks contract, on venues that attach one. A hooks contract is extra code the venue runs around each swap.</td>
    </tr>

    <tr>
      <td>`token_ids`</td>
      <td>`ARRAY<STRING>`</td>
      <td>The tokens the pool holds, in pool order, as keys of `dimensions.tokens`.</td>
    </tr>
  </tbody>
</table>

## Sample queries

**Pools per chain**

Count the pools each app has created on each chain.

```sql theme={null}
select
    app_id,
    chain_id,
    count(*) as pools
from `dimensions.dex_pools`
group by app_id, chain_id
order by pools desc
limit 20
```

**A pool's tokens**

`token_ids` lists the pool's tokens, in the order the pool holds them, as keys of `dimensions.tokens`. Join that table on one element of the list for symbol, name and decimals; a leg's curated asset, where it has one, is on `dimensions.asset_tokens` under the same key.

```sql theme={null}
select
    pools.dex_pool_id,
    pools.pool_display_name,
    position,
    tokens.symbol,
    tokens.decimals,
    tokens.token_address
from `dimensions.dex_pools` as pools,
    unnest(pools.token_ids) as token_id with offset as position
join `dimensions.tokens` as tokens
    using (token_id)
where pools.dex_pool_id = '0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640-ethereum'
order by position
```

**Pools for one pair**

`token_ids` holds the pool's tokens as a list, so a pair is two `in unnest(token_ids)` clauses rather than one equality.

```sql theme={null}
select
    dex_pool_id,
    app_id,
    pool_display_name,
    fee_tier
from `dimensions.dex_pools`
where chain_id = 'ethereum'
  and '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum' in unnest(token_ids)
  and '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2-ethereum' in unnest(token_ids)
order by created_at
limit 50
```

**Registry against traded pools**

A pool enters this table when its factory emits the creation event, so the registry side counts every pool an app has ever created and the traded side counts the ones that saw a swap.

```sql theme={null}
with registry as (
    select
        app_id,
        count(*) as pools_in_registry
    from `dimensions.dex_pools`
    where chain_id = 'ethereum'
    group by app_id
),

traded as (
    select
        app_id,
        count(distinct dex_pool_id) as pools_traded
    from `metrics_dex_pools.trading_volume_daily`
    where chain_id = 'ethereum'
      and timestamp >= timestamp('2026-08-01')
      and timestamp < timestamp('2026-08-08')
    group by app_id
)

select
    app_id,
    registry.pools_in_registry,
    traded.pools_traded
from registry
left join traded
    using (app_id)
order by registry.pools_in_registry desc
```


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