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

> Asset names, where each is issued, and what each one tracks.

The identity tables behind every asset figure. Every fact and metric joins to them, and [Coverage](https://tokenterminal.com/docs/catalog/assets.md) introduces the grain.

## Tables

**Assets**

One row per curated asset: its name, what kind of instrument it is, and what it tracks. The row belongs to no particular chain, and the per-chain contracts live in `dimensions.asset_tokens`.

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

  <tbody>
    <tr>
      <td>`asset_id`</td>
      <td>`STRING`</td>
      <td>Identifier of the asset, for example `usdc`. Every table that mentions an asset joins on this.</td>
    </tr>

    <tr>
      <td>`reference_asset_id`</td>
      <td>`STRING`</td>
      <td>What the asset tracks or wraps. Joins `dimensions.reference_assets`.</td>
    </tr>

    <tr>
      <td>`name`</td>
      <td>`STRING`</td>
      <td>Display name of the asset.</td>
    </tr>

    <tr>
      <td>`symbol`</td>
      <td>`STRING`</td>
      <td>Ticker symbol of the asset.</td>
    </tr>

    <tr>
      <td>`asset_type`</td>
      <td>`STRING`</td>
      <td>What kind of instrument it is: `stablecoin`, `tokenized-stocks`, `tokenized-funds`, `lending-token`, `tokenized-commodities`, `liquid-staking-token`, `tokenized-cryptoasset` or `wrapped_native`. One value per asset.</td>
    </tr>

    <tr>
      <td>`coingecko_id`</td>
      <td>`STRING`</td>
      <td>Identifier of the same asset in the CoinGecko catalogue, for joining our record to a public one.</td>
    </tr>

    <tr>
      <td>`coinmarketcap_id`</td>
      <td>`STRING`</td>
      <td>Identifier of the same asset in the CoinMarketCap catalogue, for the same purpose.</td>
    </tr>

    <tr>
      <td>`description`</td>
      <td>`STRING`</td>
      <td>Short description of the asset.</td>
    </tr>

    <tr>
      <td>`yahoo_ticker`</td>
      <td>`STRING`</td>
      <td>Ticker the underlying trades under on Yahoo Finance, where it is listed.</td>
    </tr>

    <tr>
      <td>`custom_price_fx_peg`</td>
      <td>`STRUCT`</td>
      <td>A fixed rate the asset is priced at rather than a market quote, in `currency`, `multiplier` and `priority`. Set only where the asset declares one, and `priority` says whether the rate overrides the market price or only fills in where there is none.</td>
    </tr>

    <tr>
      <td>`created_at`</td>
      <td>`TIMESTAMP`</td>
      <td>When the asset entered the registry.</td>
    </tr>

    <tr>
      <td>`metrics_verified_at`</td>
      <td>`TIMESTAMP`</td>
      <td>When the asset's published metrics were last verified. Null while unverified.</td>
    </tr>

    <tr>
      <td>`mica_marker`</td>
      <td>`STRING`</td>
      <td>Which MiCA category the peg implies: `emt_by_peg` for single-currency stablecoins, `art_by_peg` for other stablecoins, `other_crypto_asset` or `out_of_scope_financial_instrument` for everything else. A marker read off the peg.</td>
    </tr>

    <tr>
      <td>`mica_authorization_status`</td>
      <td>`STRING`</td>
      <td>Whether the token is authorized under MiCA according to the official register: `emt_authorized`, `art_authorized`, `not_authorized`, `application_withdrawn`, `out_of_scope_mifid`, `other_crypto_asset` or `not_checked`. A sourced regulatory fact, where `mica_marker` is read off the peg.</td>
    </tr>

    <tr>
      <td>`regulatory_supervised`</td>
      <td>`STRING`</td>
      <td>What the issuer discloses about its own supervision: `true`, `false` or `unknown`. A disclosure, taken as given.</td>
    </tr>

    <tr>
      <td>`regulator`</td>
      <td>`STRING`</td>
      <td>The authority the issuer names as its supervisor, such as `NYDFS/FinCEN`. Filled in where the issuer names one.</td>
    </tr>

    <tr>
      <td>`reserves_source`</td>
      <td>`STRING`</td>
      <td>Where the reserve figure comes from: `attestation` for an issuer-published report, `onchain` where the backing addresses are identified and the balance computed here, `none` where the issuer publishes nothing.</td>
    </tr>

    <tr>
      <td>`reserves_attestor`</td>
      <td>`STRING`</td>
      <td>The firm signing the attestation, filled in where `reserves_source` is `attestation`.</td>
    </tr>

    <tr>
      <td>`return_treatment`</td>
      <td>`STRING`</td>
      <td>How the token treats the income the underlying pays: `total_return`, `price_return`, `price_return_with_distribution` or `not_applicable`. Keyed on the token rather than on what it tracks, so two tokenizations of one share can differ.</td>
    </tr>

    <tr>
      <td>`issuer_legal_name`</td>
      <td>`STRING`</td>
      <td>The issuing entity as a government register spells it, which is routinely different from the brand.</td>
    </tr>

    <tr>
      <td>`issuer_domicile`</td>
      <td>`STRING`</td>
      <td>ISO 3166-1 alpha-2 country code of where the issuing entity is registered, such as `US`. Resolved from the issuing project, so it is filled in where that project has a domicile on file.</td>
    </tr>

    <tr>
      <td>`issuer_lei`</td>
      <td>`STRING`</td>
      <td>Legal Entity Identifier of the issuing entity.</td>
    </tr>

    <tr>
      <td>`issuer_cik`</td>
      <td>`STRING`</td>
      <td>SEC Central Index Key of the issuing entity.</td>
    </tr>

    <tr>
      <td>`issuer_regulatory_framework`</td>
      <td>`ARRAY<STRING>`</td>
      <td>Regimes the issuing entity operates under. An array because an entity can sit under several at once.</td>
    </tr>

    <tr>
      <td>`issuer_legal_source_url`</td>
      <td>`STRING`</td>
      <td>The filing or register the legal fields above were read from, with `issuer_legal_retrieved_at` recording when.</td>
    </tr>

    <tr>
      <td>`issuer_legal_retrieved_at`</td>
      <td>`STRING`</td>
      <td>When `issuer_legal_source_url` was last read.</td>
    </tr>

    <tr>
      <td>`use_of_income`</td>
      <td>`STRING`</td>
      <td>What the issuer says it does with the income the underlying pays, in its own words. `return_treatment` is the coded answer to the same question.</td>
    </tr>

    <tr>
      <td>`isin`</td>
      <td>`STRING`</td>
      <td>International Securities Identification Number of the instrument, where it has one.</td>
    </tr>

    <tr>
      <td>`cusip`</td>
      <td>`STRING`</td>
      <td>CUSIP of the instrument, where it has one.</td>
    </tr>

    <tr>
      <td>`peg_currency`</td>
      <td>`STRING`</td>
      <td>ISO currency code of the peg, set where the asset tracks a national currency. A fund strategy, a share or a commodity is tracked without a peg, and leaves this empty.</td>
    </tr>

    <tr>
      <td>`project_relations`</td>
      <td>`ARRAY<STRUCT>`</td>
      <td>Every project linked to the asset, one element per `(project_id, relation)`. `relation` is `issuer`, `asset_manager`, `risk_curator` or `manager`. Most assets link to one project; a few link to several, such as an issuer alongside a separate manager.</td>
    </tr>

    <tr>
      <td>`issuer_project_id`</td>
      <td>`STRING`</td>
      <td>The project whose relation is `issuer`, when exactly one project holds that relation. Read `project_relations` for the full set, which is what this column resolves.</td>
    </tr>
  </tbody>
</table>

**Asset chains**

One row per curated asset per chain it is deployed on: the asset's deployments on that chain, taken together. The asset-and-chain tables in `metrics_assets_by_chain` and `screeners.assets_by_chain` key on its `asset_id` and `chain_id`.

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

  <tbody>
    <tr>
      <td>`asset_id`</td>
      <td>`STRING`</td>
      <td>Asset the row belongs to. Joins `dimensions.assets`.</td>
    </tr>

    <tr>
      <td>`chain_id`</td>
      <td>`STRING`</td>
      <td>Chain the asset is deployed on. Joins `dimensions.chains`.</td>
    </tr>

    <tr>
      <td>`bridged_status`</td>
      <td>`STRING`</td>
      <td>`native` or `bridged` where every deployment of the asset on the chain is one or the other, `mixed` where the chain has both.</td>
    </tr>

    <tr>
      <td>`token_count`</td>
      <td>`INT64`</td>
      <td>Registered deployments of the asset on the chain.</td>
    </tr>

    <tr>
      <td>`asset_token_ids`</td>
      <td>`ARRAY<STRING>`</td>
      <td>Those deployments, in `asset_token_id` order; each joins `dimensions.asset_tokens`.</td>
    </tr>

    <tr>
      <td>`first_issued_onchain`</td>
      <td>`DATE`</td>
      <td>The earliest `first_issued_onchain` among those deployments.</td>
    </tr>
  </tbody>
</table>

**Deployments**

One row per onchain deployment of a curated asset, which is one token contract on one chain. A deployment is what every supply, holder and transfer measure is counted per.

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

  <tbody>
    <tr>
      <td>`asset_token_id`</td>
      <td>`STRING`</td>
      <td>Identifier of the deployment, formatted `{asset_id}-{token_address}-{chain_id}`.</td>
    </tr>

    <tr>
      <td>`asset_id`</td>
      <td>`STRING`</td>
      <td>Asset the deployment belongs to. Joins `dimensions.assets`.</td>
    </tr>

    <tr>
      <td>`token_id`</td>
      <td>`STRING`</td>
      <td>Key of the deployment in `dimensions.tokens`, formatted `{token_address}-{chain_id}`. This table keeps every deployment that exists, so a `token_id` resolves to a row in `dimensions.tokens` where the price feed reaches that contract.</td>
    </tr>

    <tr>
      <td>`chain_id`</td>
      <td>`STRING`</td>
      <td>Chain the contract is deployed on.</td>
    </tr>

    <tr>
      <td>`token_address`</td>
      <td>`STRING`</td>
      <td>Address of the token contract.</td>
    </tr>

    <tr>
      <td>`is_bridged`</td>
      <td>`BOOL`</td>
      <td>Raw registry flag: bridged in rather than issued natively. Always present, so `false` means native or unstated. Filter on `bridged_status` instead.</td>
    </tr>

    <tr>
      <td>`bridged_status`</td>
      <td>`STRING`</td>
      <td>The classification supply measures split on, and the column to filter supply by: `native`, `bridged` or `unclassified`. A stated registry flag is taken as given; an unstated one reads `native` where the asset has no confirmed bridged deployment anywhere, and `unclassified` where it has one.</td>
    </tr>
  </tbody>
</table>

**Reference assets**

One row per thing an instrument can track or wrap: national currencies, stocks, commodities, funds and cryptoassets. `type` classifies the reference; `dimensions.assets.asset_type` classifies the instrument that tracks or wraps it.

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

  <tbody>
    <tr>
      <td>`reference_asset_id`</td>
      <td>`STRING`</td>
      <td>Identifier of the thing being tracked.</td>
    </tr>

    <tr>
      <td>`linked_asset_id`</td>
      <td>`STRING`</td>
      <td>Its own tokenized asset in `dimensions.assets`, where one exists.</td>
    </tr>

    <tr>
      <td>`name`</td>
      <td>`STRING`</td>
      <td>Display name.</td>
    </tr>

    <tr>
      <td>`symbol`</td>
      <td>`STRING`</td>
      <td>Ticker symbol.</td>
    </tr>

    <tr>
      <td>`type`</td>
      <td>`STRING`</td>
      <td>What kind of thing it is: `stock`, `crypto`, `fiat`, `pendle_pt`, `etf`, `commodity`, `fund_strategy`, `bond` or `other`. A `fiat` row is what makes an asset pointing at it a currency-pegged one, and what fills `peg_currency` on `dimensions.assets`.</td>
    </tr>

    <tr>
      <td>`currency_code`</td>
      <td>`STRING`</td>
      <td>ISO currency code, filled in on the `fiat` rows.</td>
    </tr>

    <tr>
      <td>`unit`</td>
      <td>`STRING`</td>
      <td>The physical unit a commodity is quoted in, for example `troy ounce` or `barrel`. Filled in on the `commodity` rows.</td>
    </tr>

    <tr>
      <td>`aliases`</td>
      <td>`ARRAY<STRING>`</td>
      <td>Other names it is known by.</td>
    </tr>

    <tr>
      <td>`yahoo_ticker`</td>
      <td>`STRING`</td>
      <td>Ticker it trades under on Yahoo Finance, where it is listed.</td>
    </tr>
  </tbody>
</table>

## Sample queries

**Assets by type**

`asset_type` holds one value per asset, so these counts add up to the whole registry.

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

**Deployments of one asset**

`bridged_status` says whether each contract was issued natively on its chain or bridged in from another, and it is the column the supply measures split on.

```sql theme={null}
select
    asset_token_id,
    chain_id,
    token_address,
    bridged_status
from `dimensions.asset_tokens`
where asset_id = 'usdc'
order by chain_id
```

**Chains of one asset**

One row per chain, with `token_count` deployments behind it. `mixed` marks a chain where the asset's contracts differ in `bridged_status`.

```sql theme={null}
select
    chain_id,
    bridged_status,
    token_count,
    first_issued_onchain
from `dimensions.assets_by_chain`
where asset_id = 'usdc'
order by token_count desc, chain_id
```

**What an asset tracks**

Tracking a national currency is what makes an asset a currency-pegged stablecoin, and `assets.peg_currency` comes from it. The inner join keeps the assets whose `reference_asset_id` resolves to a row.

```sql theme={null}
select
    assets.asset_id,
    reference_assets.reference_asset_id,
    reference_assets.type,
    reference_assets.currency_code
from `dimensions.assets` as assets
join `dimensions.reference_assets` as reference_assets
    using (reference_asset_id)
where assets.asset_id in ('usdc', 'usdt', 'dai')
order by assets.asset_id
```

**Assets linked to a project**

One asset can name several projects, so `unnest(project_relations)` yields one row per relation and a count taken over it counts an asset once per relation. Filter inside the `unnest`, or use `exists` where only presence matters.

```sql theme={null}
select
    assets.asset_id,
    assets.name,
    relation.relation
from `dimensions.assets` as assets
cross join unnest(assets.project_relations) as relation
where relation.project_id = 'securitize'
order by assets.asset_id
```


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