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

# Order-book markets

> Order books as a venue: the key, and how to rank them.

One row per order-book market that has traded in `dimensions.order_book_markets`, a book of buy and sell orders where the token itself changes hands, covering spot books and outcome markets. `order_book_market_id` is the venue's book identifier joined with the chain, and it is the key every order-book figure joins on.

## Coverage

One row per app, and a tick marks every app that reports the measure at this grain. It is the same table as the Order book market tab of [Perpetuals](/docs/catalog/perpetuals).

<div class="tt-roster">
  <table class="tt-coverage">
    <thead>
      <tr>
        <th width="230">App</th>
        <th width="140">Project</th>
        <th>Trading volume</th>
        <th>Fees</th>
        <th>Supply-side fees</th>
        <th>Revenue</th>
      </tr>
    </thead>

    <tbody>
      <tr><td><code>hyperliquid-outcome-markets</code></td><td><code>hyperliquid</code></td><td><span class="tt-check">✓</span></td><td><span class="tt-check">✓</span></td><td><span class="tt-check">✓</span></td><td><span class="tt-check">✓</span></td></tr>
      <tr><td><code>hyperliquid-spot</code></td><td><code>hyperliquid</code></td><td><span class="tt-check">✓</span></td><td><span class="tt-check">✓</span></td><td><span class="tt-check">✓</span></td><td><span class="tt-check">✓</span></td></tr>
    </tbody>
  </table>
</div>

## Columns

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

  <tbody>
    <tr><td><code>order\_book\_market\_id</code></td><td>STRING</td><td>Identifier of the market: the venue's book identifier joined with the chain.</td></tr>
    <tr><td><code>project\_id</code></td><td>STRING</td><td>Project the operating app belongs to.</td></tr>
    <tr><td><code>app\_id</code></td><td>STRING</td><td>The app running the book. A book runs under this one app, where a perpetual market has an exchange app and an interface app.</td></tr>
    <tr><td><code>chain\_id</code></td><td>STRING</td><td>Chain the book settles on.</td></tr>
    <tr><td><code>quote\_asset\_id</code></td><td>STRING</td><td>The token volume is measured in, keyed like <code>dimensions.assets</code>. Every accepted quote token is a dollar stablecoin (<code>usdc</code>, <code>usdh</code>, <code>usdt0</code>, <code>usde</code>), so a trade's size times its price is already its dollar value.</td></tr>
    <tr><td><code>base\_symbol</code></td><td>STRING</td><td>Symbol of the traded token, as the venue lists it. Several contracts can share one symbol.</td></tr>
    <tr><td><code>name</code></td><td>STRING</td><td>Readable pair name, for example <code>HYPE/USDC</code>.</td></tr>
    <tr><td><code>created\_at</code></td><td>TIMESTAMP</td><td>Time of the first trade seen in the market, which is what puts the row in this table.</td></tr>
  </tbody>
</table>

## Sample queries

<Tabs>
  <Tab title="Rank books by volume">
    The volume table keys on `order_book_market_id`, and the registry turns that key into a readable pair and names the app running the book. Volume is a flow, so a week of it adds up.

    ```sql theme={null}
    select
        markets.name,
        markets.app_id,
        markets.chain_id,
        sum(volume.trading_volume) as trading_volume
    from `metrics_order_book_markets.trading_volume_daily` as volume
    join `dimensions.order_book_markets` as markets
        using (order_book_market_id)
    where volume.timestamp >= timestamp('2026-08-01')
      and volume.timestamp < timestamp('2026-08-08')
    group by 1, 2, 3
    order by trading_volume desc
    limit 20
    ```
  </Tab>

  <Tab title="Books per app and chain">
    `created_at` is when the market first traded, so the earliest one per app reads as the date its book opened.

    ```sql theme={null}
    select
        chain_id,
        app_id,
        count(*) as markets,
        min(created_at) as first_traded
    from `dimensions.order_book_markets`
    group by 1, 2
    order by markets desc
    ```
  </Tab>
</Tabs>
