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

# Registry

> One row per token: address, symbol, decimals, and its asset if it has one.

`dimensions.tokens` contains one row per token: one contract on one chain. It covers every token our price feed covers, and every other table about tokens joins to it.

## Columns

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

  <tbody>
    <tr>
      <td><code>token\_id</code></td>
      <td><code>STRING</code></td>
      <td>Token identifier: <code>\{token\_address}-\{chain\_id}</code>.</td>
    </tr>

    <tr>
      <td><code>asset\_id</code></td>
      <td><code>STRING</code></td>
      <td>The curated asset this token is a deployment of. Empty where no one has matched it.</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>Contract address, lowercase.</td>
    </tr>

    <tr>
      <td><code>symbol</code></td>
      <td><code>STRING</code></td>
      <td>Symbol read from the contract, unverified.</td>
    </tr>

    <tr>
      <td><code>name</code></td>
      <td><code>STRING</code></td>
      <td>Name read from the contract, unverified.</td>
    </tr>

    <tr>
      <td><code>decimals</code></td>
      <td><code>INT64</code></td>
      <td>How many decimal places to move to turn a raw amount into a token amount.</td>
    </tr>

    <tr>
      <td><code>created\_at</code></td>
      <td><code>TIMESTAMP</code></td>
      <td>When the token launched onchain.</td>
    </tr>

    <tr>
      <td><code>bridged</code></td>
      <td><code>BOOL</code></td>
      <td>Whether the deployment is a bridged wrapper. Empty where the token has not been matched to an asset.</td>
    </tr>
  </tbody>
</table>

## Sample queries

<Tabs>
  <Tab title="By address">
    **Look up a token by its address.** The address identifies the token. `symbol` and `name` are read from the contract without verification.

    ```sql theme={null}
    select
        token_id,
        chain_id,
        token_address,
        symbol,
        name,
        decimals,
        created_at
    from `dimensions.tokens`
    where token_id = '0xdac17f958d2ee523a2206206994597c13d831ec7-ethereum'
    ```
  </Tab>

  <Tab title="By asset">
    **List the tokens matched to one asset.** `asset_id` is filled in only where a token has been matched to a tokenized asset.

    ```sql theme={null}
    select
        token_id,
        chain_id,
        token_address,
        symbol,
        decimals,
        bridged
    from `dimensions.tokens`
    where asset_id = 'usdc'
    order by chain_id
    ```
  </Tab>
</Tabs>

## Notes

`symbol` and `name` are text read straight off the contract, and nobody has checked them. Any contract can call itself USDC, and thousands do. Work out what a token is from `token_address`, or from `asset_id` where somebody has already made that judgment.

`token_id` is the key every other token table joins on. A source row with no address would produce an empty key that matches nothing, so those rows are dropped before they get here. Every row carries a real address.

`asset_id` and `bridged` come from the curated asset registry, and are empty for the long tail. A token that has been matched also appears as a deployment row in `dimensions.asset_tokens`, which says more about it, including `bridged_status`. [Assets ▸ Registry](/docs/catalog/assets/registry) covers that layer.
