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

> App names, the project that runs each one, and market sectors.

The identity table behind every app figure. Every metric joins to it, and [Coverage](https://tokenterminal.com/docs/catalog/apps/index.md) introduces the grain.

## Columns

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

  <tbody>
    <tr>
      <td>`app_id`</td>
      <td>`STRING`</td>
      <td>Identifier of the app. Every table that mentions an app joins on this.</td>
    </tr>

    <tr>
      <td>`project_id`</td>
      <td>`STRING`</td>
      <td>Project that runs the app. Joins `dimensions.projects`.</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 market sector tag on the app.</td>
    </tr>

    <tr>
      <td>`primary_market_sector`</td>
      <td>`STRING`</td>
      <td>The first element of `market_sectors`. One value per row.</td>
    </tr>

    <tr>
      <td>`created_at`</td>
      <td>`TIMESTAMP`</td>
      <td>When the app was added to the registry.</td>
    </tr>
  </tbody>
</table>

## Sample queries

**Apps of one project**

`project_id` is the same key the daily tables use, and one project has several rows here.

```sql theme={null}
select
    app_id,
    name,
    market_sectors,
    created_at
from `dimensions.apps`
where project_id = 'hyperliquid'
order by app_id
```

**Apps by sector**

`primary_market_sector` keeps one row per app however the tagging changes later. `market_sectors` is a list, so joining through `unnest(market_sectors)` yields one row per tag and any total taken off it comes out too high.

```sql theme={null}
select
    primary_market_sector,
    count(*) as apps
from `dimensions.apps`
group by primary_market_sector
order by apps desc
```

**Apps with their project**

The app's name lives here and the project's in `dimensions.projects`, so a row naming both is a join on `project_id`.

```sql theme={null}
select
    apps.app_id,
    apps.name,
    projects.name as project_name
from `dimensions.apps` as apps
join `dimensions.projects` as projects
    using (project_id)
where apps.primary_market_sector = 'lending'
order by project_name, apps.app_id
```


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