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

> Real-world asset identity and the reference assets the tokens stand for.

The identity tables behind every real-world asset figure. Every metric joins to one of them, and [Coverage](/docs/catalog/real-world-assets) introduces each grain.

## Tables

<Tabs>
  <Tab title="Assets">
    One row per real-world asset: `dimensions.assets` filtered on the three `tokenized-*` `asset_type` values: stocks, funds and commodities.

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

      <tbody>
        <tr>
          <td><code>asset\_id</code></td>
          <td><code>STRING</code></td>
          <td>Identifier of the asset, for example <code>usdc</code>.</td>
        </tr>

        <tr>
          <td><code>reference\_asset\_id</code></td>
          <td><code>STRING</code></td>
          <td>What the asset tracks or wraps. Joins <code>dimensions.reference\_assets</code>.</td>
        </tr>

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

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

        <tr>
          <td><code>asset\_type</code></td>
          <td><code>STRING</code></td>
          <td>What kind of instrument it is: <code>stablecoin</code>, <code>tokenized-stocks</code>, <code>tokenized-funds</code>, <code>lending-token</code>, <code>tokenized-commodities</code>, <code>liquid-staking-token</code>, <code>tokenized-cryptoasset</code> or <code>wrapped\_native</code>.</td>
        </tr>

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

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

        <tr>
          <td><code>created\_at</code></td>
          <td><code>TIMESTAMP</code></td>
          <td>When the asset entered the registry.</td>
        </tr>

        <tr>
          <td><code>metrics\_verified\_at</code></td>
          <td><code>TIMESTAMP</code></td>
          <td>When the asset's published metrics were last verified. Null while unverified.</td>
        </tr>

        <tr>
          <td><code>mica\_marker</code></td>
          <td><code>STRING</code></td>
          <td>Which MiCA category the peg implies: <code>emt\_by\_peg</code> for single-currency stablecoins, <code>art\_by\_peg</code> for other stablecoins, <code>other\_crypto\_asset</code> or <code>out\_of\_scope\_financial\_instrument</code> for everything else. A marker, not a regulatory ruling.</td>
        </tr>

        <tr>
          <td><code>mica\_authorization\_status</code></td>
          <td><code>STRING</code></td>
          <td>Whether the token is authorized under MiCA according to the official register: <code>emt\_authorized</code>, <code>art\_authorized</code>, <code>not\_authorized</code>, <code>application\_withdrawn</code>, <code>out\_of\_scope\_mifid</code>, <code>other\_crypto\_asset</code> or <code>not\_checked</code>. A sourced regulatory fact, unlike <code>mica\_marker</code>, which is read off the peg.</td>
        </tr>

        <tr>
          <td><code>regulatory\_supervised</code></td>
          <td><code>STRING</code></td>
          <td>What the issuer discloses about its own supervision: <code>true</code>, <code>false</code> or <code>unknown</code>. A disclosure, never an inference.</td>
        </tr>

        <tr>
          <td><code>regulator</code></td>
          <td><code>STRING</code></td>
          <td>The authority the issuer names as its supervisor, such as <code>NYDFS/FinCEN</code>. Empty where the issuer names none.</td>
        </tr>

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

        <tr>
          <td><code>reserves\_attestor</code></td>
          <td><code>STRING</code></td>
          <td>The firm signing the attestation, filled in where <code>reserves\_source</code> is <code>attestation</code>.</td>
        </tr>

        <tr>
          <td><code>return\_treatment</code></td>
          <td><code>STRING</code></td>
          <td>How the token treats the income the underlying pays: <code>total\_return</code>, <code>price\_return</code>, <code>price\_return\_with\_distribution</code> or <code>not\_applicable</code>. Keyed on the token rather than on what it tracks, so two tokenizations of one share can differ.</td>
        </tr>

        <tr>
          <td><code>issuer\_legal\_name</code></td>
          <td><code>STRING</code></td>
          <td>The issuing entity as a government register spells it, which is routinely not the brand.</td>
        </tr>

        <tr>
          <td><code>issuer\_domicile</code></td>
          <td><code>STRING</code></td>
          <td>ISO 3166-1 alpha-2 country code of where the issuing entity is registered, such as <code>US</code>. Resolved from the issuing project, so it is null when that project has no domicile on file.</td>
        </tr>

        <tr>
          <td><code>issuer\_lei</code></td>
          <td><code>STRING</code></td>
          <td>Legal Entity Identifier of the issuing entity.</td>
        </tr>

        <tr>
          <td><code>issuer\_cik</code></td>
          <td><code>STRING</code></td>
          <td>SEC Central Index Key of the issuing entity.</td>
        </tr>

        <tr>
          <td><code>issuer\_regulatory\_framework</code></td>
          <td><code>ARRAY\<STRING></code></td>
          <td>Regimes the issuing entity operates under. An array because an entity can sit under several at once.</td>
        </tr>

        <tr>
          <td><code>issuer\_legal\_source\_url</code></td>
          <td><code>STRING</code></td>
          <td>The filing or register the legal fields above were read from, with <code>issuer\_legal\_retrieved\_at</code> recording when.</td>
        </tr>

        <tr>
          <td><code>issuer\_legal\_retrieved\_at</code></td>
          <td><code>STRING</code></td>
          <td>When <code>issuer\_legal\_source\_url</code> was last read.</td>
        </tr>

        <tr>
          <td><code>use\_of\_income</code></td>
          <td><code>STRING</code></td>
          <td>What the issuer says it does with the income the underlying pays, in its own words. <code>return\_treatment</code> is the coded answer to the same question.</td>
        </tr>

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

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

        <tr>
          <td><code>peg\_currency</code></td>
          <td><code>STRING</code></td>
          <td>ISO currency code of the peg, set when the asset tracks a national currency. Empty otherwise: a fund strategy, a share or a commodity is not a peg.</td>
        </tr>

        <tr>
          <td><code>project\_relations</code></td>
          <td><code>ARRAY\<STRUCT></code></td>
          <td>Every project linked to the asset, one element per <code>(project\_id, product\_id, relation)</code>. <code>relation</code> is <code>issuer</code>, <code>asset\_manager</code>, <code>risk\_curator</code> or <code>manager</code>. Most assets link to one project; a few link to several, such as an issuer alongside a separate manager.</td>
        </tr>

        <tr>
          <td><code>issuer\_project\_id</code></td>
          <td><code>STRING</code></td>
          <td>The project whose relation is <code>issuer</code>, when exactly one project holds that relation. Empty when none do, and empty when more than one does; read <code>project\_relations</code> for the full set.</td>
        </tr>

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

        <tr>
          <td><code>coinmarketcap\_id</code></td>
          <td><code>STRING</code></td>
          <td>Identifier of the same asset in the CoinMarketCap catalogue, for the same purpose.</td>
        </tr>

        <tr>
          <td><code>yahoo\_ticker</code></td>
          <td><code>STRING</code></td>
          <td>Ticker the underlying trades under on Yahoo Finance, where it is listed.</td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Deployments">
    One row per chain an asset is issued on, in `dimensions.asset_tokens`. `bridged_status` says whether the supply was minted there or bridged in.

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

      <tbody>
        <tr>
          <td><code>asset\_token\_id</code></td>
          <td><code>STRING</code></td>
          <td>Identifier of the deployment, formatted <code>\{asset\_id}-\{token\_address}-\{chain\_id}</code>.</td>
        </tr>

        <tr>
          <td><code>asset\_id</code></td>
          <td><code>STRING</code></td>
          <td>Asset the deployment belongs to. Joins <code>dimensions.assets</code>.</td>
        </tr>

        <tr>
          <td><code>token\_id</code></td>
          <td><code>STRING</code></td>
          <td>Key of the deployment in <code>dimensions.tokens</code>, formatted <code>\{token\_address}-\{chain\_id}</code>.</td>
        </tr>

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

        <tr>
          <td><code>token\_address</code></td>
          <td><code>STRING</code></td>
          <td>Address of the token contract.</td>
        </tr>

        <tr>
          <td><code>is\_bridged</code></td>
          <td><code>BOOL</code></td>
          <td>Raw registry flag: bridged in rather than issued natively. Always present, so <code>false</code> means native or unstated. Filter on <code>bridged\_status</code> instead.</td>
        </tr>

        <tr>
          <td><code>bridged\_status</code></td>
          <td><code>STRING</code></td>
          <td>The classification supply measures split on: <code>native</code>, <code>bridged</code> or <code>unclassified</code>.</td>
        </tr>
      </tbody>
    </table>
  </Tab>

  <Tab title="Reference assets">
    One row per thing a real-world asset stands for, in `dimensions.reference_assets`, classified in `type`. Some references are broad categories, such as `etf` and `fund_strategy`, and an asset pointing at one stands for the category while its own name says which instrument it wraps.

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

      <tbody>
        <tr>
          <td><code>reference\_asset\_id</code></td>
          <td><code>STRING</code></td>
          <td>Identifier of the thing being tracked.</td>
        </tr>

        <tr>
          <td><code>linked\_asset\_id</code></td>
          <td><code>STRING</code></td>
          <td>Its own tokenized asset in <code>dimensions.assets</code>, where one exists.</td>
        </tr>

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

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

        <tr>
          <td><code>type</code></td>
          <td><code>STRING</code></td>
          <td>What kind of thing it is: <code>stock</code>, <code>crypto</code>, <code>fiat</code>, <code>pendle\_pt</code>, <code>etf</code>, <code>commodity</code>, <code>fund\_strategy</code>, <code>bond</code> or <code>other</code>.</td>
        </tr>

        <tr>
          <td><code>currency\_code</code></td>
          <td><code>STRING</code></td>
          <td>ISO currency code, filled in only on the <code>fiat</code> rows.</td>
        </tr>

        <tr>
          <td><code>unit</code></td>
          <td><code>STRING</code></td>
          <td>The physical unit a commodity is quoted in, for example <code>troy ounce</code> or <code>barrel</code>. Empty on everything else.</td>
        </tr>

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

        <tr>
          <td><code>yahoo\_ticker</code></td>
          <td><code>STRING</code></td>
          <td>Ticker the reference trades under on Yahoo Finance, where it is listed.</td>
        </tr>
      </tbody>
    </table>
  </Tab>
</Tabs>

## Sample queries

<Tabs>
  <Tab title="Assets by type">
    `asset_type` is the column that separates the three `tokenized-*` types, the real-world assets, from stablecoins and the rest of the asset registry, and it is the filter every query on this page starts from.

    ```sql theme={null}
    select
        asset_type,
        count(*) as assets
    from `dimensions.assets`
    where asset_type in (
        'tokenized-stocks', 'tokenized-funds',
        'tokenized-commodities'
    )
    group by asset_type
    order by assets desc
    ```
  </Tab>

  <Tab title="One reference asset's tokens">
    `reference_asset_id` is the join between a wrapper and the thing it tracks, and several issuers can point at the same one. Each token's name says who issued it.

    ```sql theme={null}
    select
        assets.asset_id,
        assets.name,
        assets.symbol
    from `dimensions.assets` as assets
    join `dimensions.reference_assets` as reference_assets
        using (reference_asset_id)
    where reference_assets.reference_asset_id = 'nvda'
      and assets.asset_type = 'tokenized-stocks'
    order by assets.asset_id
    ```
  </Tab>

  <Tab title="Most-tokenized reference assets">
    A `having` clause on the token count keeps the result to references more than one issuer has wrapped. `type` says what kind of thing the reference is, from an equity to a fund strategy.

    ```sql theme={null}
    select
        reference_assets.reference_asset_id,
        reference_assets.name,
        reference_assets.type,
        count(*) as instruments
    from `dimensions.assets` as assets
    join `dimensions.reference_assets` as reference_assets
        using (reference_asset_id)
    where assets.asset_type in (
        'tokenized-stocks', 'tokenized-funds',
        'tokenized-commodities'
    )
    group by 1, 2, 3
    having count(*) > 1
    order by instruments desc
    ```
  </Tab>

  <Tab title="Reference assets by issuer">
    `issuer_project_id` is the project holding the `issuer` relation, so `count(distinct ...)` on it counts issuers where `count(*)` counts tokens. Where a reference asset has more tokens than issuers, one issuer runs two wrappers on the same share.

    ```sql theme={null}
    select
        reference_assets.symbol as reference_asset,
        reference_assets.type,
        count(distinct assets.issuer_project_id) as issuers,
        count(*) as tokens,
        string_agg(distinct assets.issuer_project_id order by assets.issuer_project_id) as issuer_list
    from `dimensions.assets` as assets
    join `dimensions.reference_assets` as reference_assets
        using (reference_asset_id)
    where assets.asset_type = 'tokenized-stocks'
    group by reference_asset, reference_assets.type
    order by issuers desc
    limit 20
    ```
  </Tab>

  <Tab title="Return treatment of one share">
    `return_treatment` says what the token does with the income the underlying pays. It is keyed on the token, so the same share tokenized by two issuers reads `total_return` on one row and `price_return_with_distribution` on the next.

    ```sql theme={null}
    select
        assets.symbol as wrapper,
        projects.name as issuer,
        assets.return_treatment,
        assets.issuer_domicile
    from `dimensions.assets` as assets
    join `dimensions.reference_assets` as reference_assets
        using (reference_asset_id)
    left join `dimensions.projects` as projects
        on projects.project_id = assets.issuer_project_id
    where reference_assets.symbol = 'NVDA'
      and assets.asset_type = 'tokenized-stocks'
    order by assets.return_treatment, issuer
    ```
  </Tab>

  <Tab title="Return treatment across an issuer">
    Reading `treatments` as one on every row makes the treatment a property of the issuer, held constant across every share it wraps. `string_agg` names which one the issuer settled on.

    ```sql theme={null}
    select
        projects.name as issuer,
        count(*) as tokens,
        count(distinct assets.return_treatment) as treatments,
        string_agg(distinct assets.return_treatment order by assets.return_treatment) as treatment
    from `dimensions.assets` as assets
    join `dimensions.projects` as projects
        on projects.project_id = assets.issuer_project_id
    where assets.asset_type = 'tokenized-stocks'
      and assets.return_treatment is not null
    group by issuer
    order by tokens desc
    ```
  </Tab>
</Tabs>
